From acebf48e2e139f6f298cfbba829cc3c29db3c891 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 03 七月 2024 10:20:23 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/MenuService.java               |    8 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/entity/User.java                       |   28 +++
 zy-asrs-admin/src/assets/main.css                                                       |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/MenuServiceImpl.java      |   17 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/HostController.java         |   91 +++++++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java  |   21 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java         |   47 +++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java          |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserMapper.java                 |    3 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserRoleMapper.java             |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/RoleMenuService.java           |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserServiceImpl.java      |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserLoginServiceImpl.java |    7 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/MenuMapper.java                 |   12 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/RoleMenuServiceImpl.java  |    8 
 zy-asrs-wms/src/main/resources/mapper/system/RoleMenuMapper.xml                         |    3 
 zy-asrs-wms/src/main/resources/mapper/system/UserMapper.xml                             |    7 
 zy-asrs-admin/src/views/login/LoginView.vue                                             |   29 +++
 zy-asrs-admin/src/config.js                                                             |    5 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserLoginService.java          |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserService.java               |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserLoginMapper.java            |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/RoleMenuMapper.java             |    2 
 zy-asrs-admin/src/views/IndexView.vue                                                   |   61 +++++++
 zy-asrs-wms/src/main/resources/mapper/system/MenuMapper.xml                             |   21 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/BaseController.java         |   23 ++
 zy-asrs-admin/src/router/index.js                                                       |    3 
 zy-asrs-wms/src/main/resources/mapper/system/UserLoginMapper.xml                        |    8 +
 28 files changed, 412 insertions(+), 14 deletions(-)

diff --git a/zy-asrs-admin/src/assets/main.css b/zy-asrs-admin/src/assets/main.css
index e45447d..af93371 100644
--- a/zy-asrs-admin/src/assets/main.css
+++ b/zy-asrs-admin/src/assets/main.css
@@ -8,7 +8,7 @@
 .trigger {
   font-size: 18px;
   line-height: 64px;
-  padding: 0 24px;
+  padding: 0 6px;
   cursor: pointer;
   transition: color 0.3s;
   color: #000000;
diff --git a/zy-asrs-admin/src/config.js b/zy-asrs-admin/src/config.js
index 4fa3870..6051ddd 100644
--- a/zy-asrs-admin/src/config.js
+++ b/zy-asrs-admin/src/config.js
@@ -4,12 +4,15 @@
     url: 'http://127.0.0.1:8081/wms',
     token: '',
     user: null,
-    locale: 'zhCN'
+    locale: 'zhCN',
+    currentHost: null,
 });
 
 export const logout = () => {
     globalState.token = null;
     globalState.user = null;
+    globalState.currentHost = null;
     localStorage.removeItem('token')
     localStorage.removeItem('user')
+
 }
\ No newline at end of file
diff --git a/zy-asrs-admin/src/router/index.js b/zy-asrs-admin/src/router/index.js
index 09b147f..885eff3 100644
--- a/zy-asrs-admin/src/router/index.js
+++ b/zy-asrs-admin/src/router/index.js
@@ -57,6 +57,9 @@
   const modules = import.meta.glob('/src/views/**/index.vue');
   const resp = await get('/api/auth/router', {});
   let result = resp.data;
+  if(result.code != 200) {
+    return null;
+  }
   let data = result.data;
   data.forEach((item) => {
     const module = modules[`/src/views${item.route}/index.vue`];
diff --git a/zy-asrs-admin/src/views/IndexView.vue b/zy-asrs-admin/src/views/IndexView.vue
index e5aa0ae..13eb79d 100644
--- a/zy-asrs-admin/src/views/IndexView.vue
+++ b/zy-asrs-admin/src/views/IndexView.vue
@@ -13,6 +13,7 @@
   RedoOutlined,
   UserOutlined,
   TranslationOutlined,
+  ApartmentOutlined,
 } from "@ant-design/icons-vue";
 import { formatMessage } from '@/utils/localeUtils.js';
 
@@ -25,6 +26,7 @@
 let currentCache = ref(null);
 let isRouterAlive = ref(true);
 const menuCache = ref([]);
+const hostList = ref([]);
 
 const components = {
   ...Icons,
@@ -71,8 +73,6 @@
     }
   })
 
-  console.log(tmpList);
-
   if (tmp == 0) {
     router.push({
       path: '/'
@@ -106,6 +106,14 @@
   }
 }
 
+function closeAllTabs() {
+  routerCache.value = [];
+  routerCacheList.value = [];
+  router.push({
+    path: '/'
+  })
+}
+
 function switchTabs(item) {
   router.push({
     path: item.key
@@ -119,6 +127,41 @@
   globalState.locale = locale;
   localStorage.setItem('locale', locale)
   reloadTabs()
+}
+
+getHostList()
+function getHostList() {
+  post('/api/show/host.action', {}).then((resp) => {
+    let result = resp.data;
+    let data = result.data;
+    let hostId = data.hostId;
+    if (data.root) {
+      post('/api/host/list', {}).then((resp) => {
+        let result = resp.data;
+        let data = result.data;
+        hostList.value = data;
+        data.forEach((item) => {
+          if (item.id == hostId) {
+            globalState.currentHost = item;
+          }
+        })
+      })
+    }
+  })
+}
+
+const switchHost = (item) => {
+  globalState.currentHost = item;
+  postForm('/api/root/change/host/auth', {
+    hostId: item.id
+  }).then((resp) => {
+    let result = resp.data;
+    if (result.code == 200) {
+      window.location.reload();
+    } else {
+      message.error(formatMessage('common.fail', '鍔犺浇澶辫触'));
+    }
+  })
 }
 
 </script>
@@ -159,6 +202,20 @@
             <MenuFoldOutlined v-else class="trigger" @click="() => (collapsed = !collapsed)" />
           </div>
           <div class="header-top-right">
+            <div class="trigger" v-if="globalState.currentHost">
+              <a-dropdown>
+                <div>
+                  <ApartmentOutlined />
+                  {{ globalState.currentHost?.name }}
+                </div>
+                <template #overlay>
+                  <a-menu>
+                    <a-menu-item v-for="(item, index) in hostList" :key="index" @click="switchHost(item)"
+                      :class="globalState.currentHost?.id == item.id ? 'active' : ''">{{ item.name }}</a-menu-item>
+                  </a-menu>
+                </template>
+              </a-dropdown>
+            </div>
             <div class="trigger">
               <a-dropdown>
                 <TranslationOutlined />
diff --git a/zy-asrs-admin/src/views/login/LoginView.vue b/zy-asrs-admin/src/views/login/LoginView.vue
index f981e72..bf0dcce 100644
--- a/zy-asrs-admin/src/views/login/LoginView.vue
+++ b/zy-asrs-admin/src/views/login/LoginView.vue
@@ -8,6 +8,8 @@
 let copyrightLargeShow = ref(false);
 let username = ref("");
 let password = ref("");
+let hostId = ref(null);
+let hostList = ref([]);
 
 function loginConfirm() {
     if (username.value == "" || password.value == "") {
@@ -17,7 +19,8 @@
 
     post('/api/login', {
         username: username.value,
-        password: password.value
+        password: password.value,
+        hostId: hostId.value,
     }).then((result) => {
         if (result.data.code == 200) {
             let data = result.data.data;
@@ -31,6 +34,25 @@
         }
     })
 
+}
+
+getHostList()
+function getHostList() {
+    get('/api/auth/host', {}).then((result) => {
+        if (result.data.code == 200) {
+            let data = result.data.data;
+            let tmp = []
+            data.forEach((item) => {
+                tmp.push({
+                    label: item.name,
+                    value: item.id
+                })
+            })
+            hostList.value = tmp;
+        } else {
+            message.error(result.data.msg)
+        }
+    })
 }
 
 </script>
@@ -59,6 +81,11 @@
                     </p>
                     <p style="margin-top: -10px;"><span class="login100-form-title p-t-20 p-b-45"
                             style="color: #868686;font-size: 24px">WMS</span></p>
+
+                    <div class="inputContainer">
+                        <a-select v-model:value="hostId" style="width: 100%;" :options="hostList"></a-select>
+                    </div>
+
                     <div class="inputContainer">
                         <svg viewBox="0 0 16 16" fill="#2e2e2e" height="16" width="16"
                             xmlns="http://www.w3.org/2000/svg" class="inputIcon">
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java
index d379c67..03a461d 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
 import com.zy.asrs.wms.system.entity.User;
+import com.zy.asrs.wms.system.entity.UserLogin;
 import net.sf.jsqlparser.expression.Expression;
 import net.sf.jsqlparser.expression.LongValue;
 import net.sf.jsqlparser.expression.NullValue;
@@ -72,6 +73,9 @@
                 if (object instanceof User) {
                     return new LongValue(((User) object).getHostId());
                 }
+                if (object instanceof UserLogin) {
+                    return new LongValue(((UserLogin) object).getHostId());
+                }
             }
         } catch (Exception e) {
             System.out.println(e.getMessage());
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java
index df3331f..555abff 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/security/JwtAuthenticationFilter.java
@@ -1,12 +1,16 @@
 package com.zy.asrs.wms.common.security;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.enums.LoginSystemType;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.wms.common.config.ConfigProperties;
 import com.zy.asrs.wms.common.constant.Constants;
 import com.zy.asrs.wms.system.entity.Menu;
+import com.zy.asrs.wms.system.entity.Role;
 import com.zy.asrs.wms.system.entity.User;
 import com.zy.asrs.wms.system.entity.UserLogin;
 import com.zy.asrs.wms.system.service.UserLoginService;
+import com.zy.asrs.wms.system.service.UserRoleService;
 import com.zy.asrs.wms.system.service.UserService;
 import com.zy.asrs.wms.utils.HttpUtils;
 import com.zy.asrs.wms.utils.JwtUtil;
@@ -50,6 +54,8 @@
     private UserService userService;
     @Resource
     private UserLoginService userLoginService;
+    @Resource
+    private UserRoleService userRoleService;
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
@@ -82,10 +88,23 @@
                     if (user == null) {
                         throw new UsernameNotFoundException("Username not found");
                     }
+                    boolean root = false;
+                    List<Role> roles = userRoleService.listByUserId(user.getId());
+                    for (Role role : roles) {
+                        if (role.getId() == 1) {
+                            root = true;
+                            break;
+                        }
+                    }
+                    UserLogin userLogin = null;
+                    if (root) {
+                        userLogin = userLoginService.superFindByUserId(user.getId(), String.valueOf(LoginSystemType.WMS));
+                    }
+
                     List<Menu> authorities = user.getAuthorities().stream()
                             .filter(m -> !Cools.isEmpty(m.getAuthority())).collect(Collectors.toList());
                     UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
-                            user, null, authorities);
+                            userLogin == null ? user : userLogin, null, authorities);
                     SecurityContextHolder.getContext().setAuthentication(authentication);
                     // token灏嗚杩囨湡绛惧彂鏂皌oken, 闃叉绐佺劧閫�鍑虹櫥褰�
                     long expiration = (claims.getExpiration().getTime() - new Date().getTime()) / 1000 / 60;
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
index 2e20b41..2a04143 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/AuthController.java
@@ -1,8 +1,11 @@
 package com.zy.asrs.wms.system.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.enums.LoginSystemType;
+import com.zy.asrs.framework.annotations.ManagerAuth;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.common.annotation.OperationLog;
 import com.zy.asrs.wms.common.config.ConfigProperties;
 import com.zy.asrs.wms.common.security.JwtSubject;
@@ -72,7 +75,7 @@
 
     @GetMapping("/auth/menu")
     public R userMenu() {
-        List<Menu> menus = roleMenuService.listMenuByUserId(getLoginUserId(), Menu.TYPE_MENU);
+        List<Menu> menus = roleMenuService.listMenuByUserId(getLoginUserId(), Menu.TYPE_MENU, getHostId());
         return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren));
     }
 
@@ -150,4 +153,46 @@
         return R.ok().add(menuList);
     }
 
+    @RequestMapping("/show/host.action")
+    @ManagerAuth
+    public R showHosts() {
+        Long hostId = getHostId();
+        String hostName = null;
+        if (hostId != null) {
+            Host host = hostService.getById(hostId);
+            if (host != null) {
+                hostName = host.getName();
+            }
+        }
+        boolean root = false;
+        List<Role> roles = userRoleService.listByUserId(getLoginUserId());
+        for (Role role : roles) {
+            if (role.getId() == 1) {
+                root = true;
+                break;
+            }
+        }
+        return R.ok().add(Cools
+                .add("root", root)
+                .add("host", hostId == null)
+                .add("hostId", hostId)
+                .add("hostName", hostName)
+        );
+    }
+
+    @RequestMapping(value = "/root/change/host/auth")
+    @ManagerAuth
+    public R rootChangeHost(@RequestParam Long hostId) {
+        UserLogin userLogin = userLoginService.superFindByUserId(getLoginUserId(), String.valueOf(LoginSystemType.WMS));
+        if (userLogin != null) {
+            userLogin.setHostId(hostId);
+            if (!userLoginService.updateById(userLogin)) {
+                throw new CoolException("淇敼鍟嗘埛澶辫触");
+            }
+            return R.ok();
+        } else {
+            return R.error();
+        }
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/BaseController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/BaseController.java
index 5a4516b..ddece93 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/BaseController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/BaseController.java
@@ -1,16 +1,32 @@
 package com.zy.asrs.wms.system.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.enums.LoginSystemType;
 import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.system.entity.Role;
 import com.zy.asrs.wms.system.entity.User;
+import com.zy.asrs.wms.system.entity.UserLogin;
+import com.zy.asrs.wms.system.service.UserLoginService;
+import com.zy.asrs.wms.system.service.UserRoleService;
+import com.zy.asrs.wms.system.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 
+import java.util.List;
 import java.util.Map;
 
 /**
  * Created by vincent on 1/30/2024
  */
 public class BaseController {
+
+    @Autowired
+    private UserLoginService userLoginService;
+    @Autowired
+    private UserRoleService userRoleService;
+    @Autowired
+    private UserService userService;
 
     public User getLoginUser() {
         try {
@@ -19,6 +35,11 @@
                 Object object = authentication.getPrincipal();
                 if (object instanceof User) {
                     return (User) object;
+                }
+                if(object instanceof UserLogin) {
+                    UserLogin userLogin = (UserLogin) object;
+                    User user = userService.superGetById(userLogin.getUserId());
+                    return user;
                 }
             }
         } catch (Exception e) {
@@ -34,7 +55,7 @@
 
     public Long getHostId() {
         User loginUser = getLoginUser();
-        return loginUser == null ? null : loginUser.getHostId();
+        return loginUser.getHostId();
     }
 
     public <T extends BaseParam> T buildParam(Map<String, Object> map, Class<T> clz) {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/HostController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/HostController.java
index 591bb1b..e6e9444 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/HostController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/controller/HostController.java
@@ -4,15 +4,21 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.common.annotation.OperationLog;
 import com.zy.asrs.wms.common.domain.BaseParam;
 import com.zy.asrs.wms.common.domain.KeyValVo;
 import com.zy.asrs.wms.common.domain.PageParam;
 import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.Menu;
+import com.zy.asrs.wms.system.entity.RoleMenu;
 import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.wms.system.service.MenuService;
+import com.zy.asrs.wms.system.service.RoleMenuService;
 import com.zy.asrs.wms.utils.ExcelUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -24,6 +30,10 @@
 
     @Autowired
     private HostService hostService;
+    @Autowired
+    private MenuService menuService;
+    @Autowired
+    private RoleMenuService roleMenuService;
 
     @PreAuthorize("hasAuthority('system:host:list')")
     @PostMapping("/host/page")
@@ -48,12 +58,68 @@
     @PreAuthorize("hasAuthority('system:host:save')")
     @OperationLog("娣诲姞鏈烘瀯")
     @PostMapping("/host/save")
+    @Transactional
     public R save(@RequestBody Host host) {
         host.setCreateTime(new Date());
         host.setUpdateTime(new Date());
         if (!hostService.save(host)) {
             return R.error("娣诲姞澶辫触");
         }
+
+        //鍒涘缓绯荤粺榛樿鑿滃崟
+        Menu menu = new Menu();
+        menu.setName("绯荤粺绠$悊");
+        menu.setParentId(0L);
+        menu.setRoute("/system");
+        menu.setType(0);
+        menu.setIcon("UserOutlined");
+        menu.setSort(1);
+        menu.setLanguageId("system.system");
+        menu.setHostId(host.getId());
+        boolean save = menuService.save(menu);
+        if (!save) {
+            throw new CoolException("娣诲姞澶辫触");
+        }
+        List<Menu> menuList = menuService.selectByPathName("绯荤粺绠$悊", 0);
+        for (Menu menu1 : menuList) {
+            menu1.setId(null);
+            menu1.setHostId(host.getId());
+            menu1.setParentId(menu.getId());
+            boolean save1 = menuService.save(menu1);
+            if (!save1) {
+                throw new CoolException("娣诲姞澶辫触");
+            }
+
+            List<Menu> menuList2 = menuService.selectByPathName(menu1.getName(), 1);
+            for (Menu menu2 : menuList2) {
+                menu2.setId(null);
+                menu2.setHostId(host.getId());
+                menu2.setParentId(menu1.getId());
+                boolean save2 = menuService.save(menu2);
+                if (!save2) {
+                    throw new CoolException("娣诲姞澶辫触");
+                }
+            }
+        }
+
+        //鍒涘缓榛樿鏉冮檺
+        for (Menu menu1 : menuList) {
+            RoleMenu roleMenu = new RoleMenu();
+            roleMenu.setRoleId(1L);
+            roleMenu.setMenuId(menu1.getId());
+            boolean save1 = roleMenuService.save(roleMenu);
+            if (!save1) {
+                throw new CoolException("娣诲姞澶辫触");
+            }
+        }
+        RoleMenu roleMenu = new RoleMenu();
+        roleMenu.setRoleId(1L);
+        roleMenu.setMenuId(menu.getId());
+        boolean save1 = roleMenuService.save(roleMenu);
+        if (!save1) {
+            throw new CoolException("娣诲姞澶辫触");
+        }
+
         return R.ok("娣诲姞鎴愬姛");
     }
 
@@ -71,7 +137,32 @@
     @PreAuthorize("hasAuthority('system:host:remove')")
     @OperationLog("鍒犻櫎鏈烘瀯")
     @PostMapping("/host/remove/{ids}")
+    @Transactional
     public R remove(@PathVariable Long[] ids) {
+        List<Host> list = hostService.list(new LambdaQueryWrapper<Host>().in(Host::getId, ids));
+        for (Host host : list) {
+            if (host.getId() == 1) {
+                throw new CoolException("鏍硅妭鐐逛笉鍙鍒犻櫎");
+            }
+
+            ArrayList<Long> menuIds = new ArrayList<>();
+            for (Menu menu : menuService.selectByHostId(host.getId())) {
+                menuIds.add(menu.getId());
+            }
+
+            if (!menuIds.isEmpty()) {
+                boolean result = roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().in(RoleMenu::getMenuId, menuIds));
+                if (!result) {
+                    throw new CoolException("鍒犻櫎澶辫触");
+                }
+
+                boolean result1 = menuService.removeByHostId(host.getId());
+                if (!result1) {
+                    throw new CoolException("鍒犻櫎澶辫触");
+                }
+            }
+        }
+
         if (!hostService.removeByIds(Arrays.asList(ids))) {
             return R.error("鍒犻櫎澶辫触");
         }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/entity/User.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/entity/User.java
index 41fac77..202301c 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/entity/User.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/entity/User.java
@@ -2,14 +2,13 @@
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.enums.LoginSystemType;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.SpringUtils;
-import com.zy.asrs.wms.system.service.DeptService;
-import com.zy.asrs.wms.system.service.HostService;
-import com.zy.asrs.wms.system.service.UserRoleService;
-import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import net.sf.jsqlparser.expression.LongValue;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.security.core.userdetails.UserDetails;
 
@@ -357,4 +356,25 @@
         return true;
     }
 
+    public Long getHostId() {
+        boolean root = false;
+        UserRoleService userRoleService = SpringUtils.getBean(UserRoleService.class);
+        UserLoginService userLoginService = SpringUtils.getBean(UserLoginService.class);
+        List<Role> roles = userRoleService.listByUserId(this.id);
+        for (Role role : roles) {
+            if (role.getId() == 1) {
+                root = true;
+                break;
+            }
+        }
+
+        if (root) {
+            UserLogin userLogin = userLoginService.superFindByUserId(this.id, String.valueOf(LoginSystemType.WMS));
+            if (userLogin != null) {
+                return userLogin.getHostId();
+            }
+        }
+        return this.hostId;
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/MenuMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/MenuMapper.java
index d1b83ea..5f0e7d7 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/MenuMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/MenuMapper.java
@@ -1,12 +1,24 @@
 package com.zy.asrs.wms.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zy.asrs.wms.system.entity.Menu;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Mapper
 @Repository
 public interface MenuMapper extends BaseMapper<Menu> {
 
+    @InterceptorIgnore(tenantLine = "true")
+    List<Menu> selectByPathName(String pathName, Integer type);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<Menu> selectByHostId(Long hostId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    int removeByHostId(Long hostId);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/RoleMenuMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/RoleMenuMapper.java
index 0bd469c..15e1c3e 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/RoleMenuMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/RoleMenuMapper.java
@@ -15,7 +15,7 @@
 public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
 
     @InterceptorIgnore(tenantLine = "true")
-    List<Menu> listMenuByUserId(@Param("userId") Long userId, @Param("type") Integer menuType);
+    List<Menu> listMenuByUserId(@Param("userId") Long userId, @Param("type") Integer menuType, @Param("hostId") Long hostId);
 
     List<Long> listStrictlyMenuByRoleId(@Param("roleId") Long roleId);
 
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserLoginMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserLoginMapper.java
index c111e96..8c74486 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserLoginMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserLoginMapper.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.wms.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.zy.asrs.wms.system.entity.UserLogin;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -9,4 +10,7 @@
 @Repository
 public interface UserLoginMapper extends BaseMapper<UserLogin> {
 
+    @InterceptorIgnore(tenantLine = "true") // 蹇界暐澶氱鎴锋嫤鎴櫒
+    UserLogin superFindByUserId(Long userId, String system);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserMapper.java
index 54ccc99..c1a46c8 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserMapper.java
@@ -20,4 +20,7 @@
     @InterceptorIgnore(tenantLine = "true")
     User selectByUsername(@Param("username") String username, @Param("hostId") Long hostId);
 
+    @InterceptorIgnore(tenantLine = "true")
+    User superGetById(@Param("id") Long id);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserRoleMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserRoleMapper.java
index 2c9ecaf..fffc97e 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserRoleMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/mapper/UserRoleMapper.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.wms.system.mapper;
 
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zy.asrs.wms.system.entity.Role;
 import com.zy.asrs.wms.system.entity.UserRole;
@@ -13,6 +14,7 @@
 @Repository
 public interface UserRoleMapper extends BaseMapper<UserRole> {
 
+    @InterceptorIgnore(tenantLine = "true") // 蹇界暐澶氱鎴锋嫤鎴櫒
     List<Role> selectByUserId(@Param("userId") Long userId);
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/MenuService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/MenuService.java
index d0937db..4628914 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/MenuService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/MenuService.java
@@ -3,6 +3,14 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zy.asrs.wms.system.entity.Menu;
 
+import java.util.List;
+
 public interface MenuService extends IService<Menu> {
 
+    List<Menu> selectByPathName(String pathName, Integer type);
+
+    List<Menu> selectByHostId(Long hostId);
+
+    boolean removeByHostId(Long hostId);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/RoleMenuService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/RoleMenuService.java
index 9e6a603..e5b8336 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/RoleMenuService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/RoleMenuService.java
@@ -10,6 +10,8 @@
 
     List<Menu> listMenuByUserId(Long userId, Integer menuType);
 
+    List<Menu> listMenuByUserId(Long userId, Integer menuType, Long hostId);
+
     List<Long> listStrictlyMenuByRoleId(Long roleId);
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserLoginService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserLoginService.java
index b0bb5e4..70b85fe 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserLoginService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserLoginService.java
@@ -9,4 +9,6 @@
 
     void saveAsync(Long userId, String token, Integer type, Long hostId, String memo, HttpServletRequest request);
 
+    UserLogin superFindByUserId(Long userId, String system);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserService.java
index dfd9632..25bfc7f 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/UserService.java
@@ -18,4 +18,6 @@
 
     String encodePassword(String password);
 
+    User superGetById(Long id);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/MenuServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/MenuServiceImpl.java
index 2057073..1938b22 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/MenuServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/MenuServiceImpl.java
@@ -6,7 +6,24 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
+import java.util.List;
+
 @Service("menuService")
 public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
 
+    @Override
+    public List<Menu> selectByPathName(String pathName, Integer type) {
+        return this.baseMapper.selectByPathName('%' + pathName + '%', type);
+    }
+
+    @Override
+    public List<Menu> selectByHostId(Long hostId) {
+        return this.baseMapper.selectByHostId(hostId);
+    }
+
+    @Override
+    public boolean removeByHostId(Long hostId) {
+        return this.baseMapper.removeByHostId(hostId) > 0;
+    }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/RoleMenuServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/RoleMenuServiceImpl.java
index f3675af..13b3308 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/RoleMenuServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/RoleMenuServiceImpl.java
@@ -7,6 +7,7 @@
 import com.zy.asrs.wms.system.service.RoleMenuService;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.List;
 
 @Service("roleMenuService")
@@ -14,7 +15,12 @@
 
     @Override
     public List<Menu> listMenuByUserId(Long userId, Integer menuType) {
-        return baseMapper.listMenuByUserId(userId, menuType);
+        return baseMapper.listMenuByUserId(userId, menuType, null);
+    }
+
+    @Override
+    public List<Menu> listMenuByUserId(Long userId, Integer menuType, Long hostId) {
+        return baseMapper.listMenuByUserId(userId, menuType, hostId);
     }
 
     @Override
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserLoginServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserLoginServiceImpl.java
index 005d73e..b55d0db 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserLoginServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserLoginServiceImpl.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.wms.system.service.impl;
 
+import com.zy.asrs.common.domain.enums.LoginSystemType;
 import com.zy.asrs.common.utils.IpTools;
 import com.zy.asrs.wms.system.mapper.UserLoginMapper;
 import com.zy.asrs.wms.system.entity.UserLogin;
@@ -25,7 +26,13 @@
         userLogin.setType(type);
         userLogin.setIp(IpTools.gainRealIp(request));
         userLogin.setMemo(memo);
+        userLogin.setSystem(String.valueOf(LoginSystemType.WMS));
+        userLogin.setHostId(hostId);
         baseMapper.insert(userLogin);
     }
 
+    @Override
+    public UserLogin superFindByUserId(Long userId, String system) {
+        return this.baseMapper.superFindByUserId(userId, system);
+    }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserServiceImpl.java
index aad85be..4a87d4f 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/system/service/impl/UserServiceImpl.java
@@ -63,4 +63,8 @@
         return password == null ? null : bCryptPasswordEncoder.encode(password);
     }
 
+    @Override
+    public User superGetById(Long id) {
+        return this.baseMapper.superGetById(id);
+    }
 }
diff --git a/zy-asrs-wms/src/main/resources/mapper/system/MenuMapper.xml b/zy-asrs-wms/src/main/resources/mapper/system/MenuMapper.xml
index 4c8bd8c..a705d86 100644
--- a/zy-asrs-wms/src/main/resources/mapper/system/MenuMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/system/MenuMapper.xml
@@ -2,4 +2,25 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zy.asrs.wms.system.mapper.MenuMapper">
 
+    <select id="selectByPathName" resultType="com.zy.asrs.wms.system.entity.Menu">
+        select * from sys_menu
+        where path_name like #{pathName}
+        and type = #{type}
+        and host_id = 1
+        and deleted = 0
+        order by id
+    </select>
+
+    <select id="selectByHostId" resultType="com.zy.asrs.wms.system.entity.Menu">
+        select * from sys_menu
+        where host_id = #{hostId}
+          and deleted = 0
+        order by id
+    </select>
+
+    <delete id="removeByHostId">
+        delete from sys_menu
+        where host_id = #{hostId}
+    </delete>
+
 </mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/system/RoleMenuMapper.xml b/zy-asrs-wms/src/main/resources/mapper/system/RoleMenuMapper.xml
index a8578c5..77d86c5 100644
--- a/zy-asrs-wms/src/main/resources/mapper/system/RoleMenuMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/system/RoleMenuMapper.xml
@@ -8,6 +8,9 @@
         <if test="type != null">
             AND type = #{type}
         </if>
+        <if test="hostId != null">
+            AND host_id = #{hostId}
+        </if>
         and deleted = 0
         and id in (
             select menu_id from sys_role_menu
diff --git a/zy-asrs-wms/src/main/resources/mapper/system/UserLoginMapper.xml b/zy-asrs-wms/src/main/resources/mapper/system/UserLoginMapper.xml
index 8522f03..8d4fa76 100644
--- a/zy-asrs-wms/src/main/resources/mapper/system/UserLoginMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/system/UserLoginMapper.xml
@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zy.asrs.wms.system.mapper.UserLoginMapper">
 
+    <select id="superFindByUserId" resultType="com.zy.asrs.wms.system.entity.UserLogin">
+        select * from sys_user_login
+        where user_id = #{userId}
+        and system = #{system}
+        order by create_time desc
+        limit 0,1
+    </select>
+
 </mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/system/UserMapper.xml b/zy-asrs-wms/src/main/resources/mapper/system/UserMapper.xml
index 20e064a..4857baa 100644
--- a/zy-asrs-wms/src/main/resources/mapper/system/UserMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/system/UserMapper.xml
@@ -13,6 +13,13 @@
         </if>
     </select>
 
+    <select id="superGetById" resultType="com.zy.asrs.wms.system.entity.User">
+        select * from sys_user
+        where 1=1
+        and deleted = 0
+        and id = #{id}
+    </select>
+
     <select id="selectPageRel" resultType="com.zy.asrs.wms.system.entity.User">
         select
         su.*

--
Gitblit v1.9.1