Pu Zhibing
2026-01-12 6584fc650eb51e30ab185c7bff2439b4bcdc6186
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/MenuController.java
@@ -34,6 +34,7 @@
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -49,6 +50,27 @@
public class MenuController extends BaseController {
    private static String PREFIX = "/system/menu/";
    // 快车相关菜单(isSpe=2时过滤)
    private static final List<String> SPE_MENUS = Arrays.asList(
        "快车订单", "快车改派管理", "快车车型设置"
    );
    // 出租车相关菜单(isTaxi=2时过滤)
    private static final List<String> TAXI_MENUS = Arrays.asList(
        "出租车订单", "出租车改派管理"
    );
    // 跨城相关菜单(isCross=2时过滤)
    private static final List<String> CROSS_MENUS = Arrays.asList(
        "跨城出行订单", "跨城改派管理", "跨城线路管理", "开通城市管理"
    );
    // 顺风车相关菜单(isHitchRide=2时过滤)
    private static final List<String> HITCH_RIDE_MENUS = Arrays.asList(
        "顺风车订单", "顺风车设置", "顺风车司机审核列表",
        "顺风车司机", "顺风车投诉", "顺风车评价"
    );
    @Autowired
    private IMenuService menuService;
@@ -216,6 +238,10 @@
            }
        }
        List<ZTreeNode> roleTreeList = this.menuService.menuTreeList(ids);
        // 分公司(type=2)和供应商(type=3)需要根据经营范围过滤菜单
        if (tCompany.getType() == 2 || tCompany.getType() == 3) {
            roleTreeList = filterMenusByBusinessScope(roleTreeList, tCompany);
        }
        return roleTreeList;
    }
@@ -237,6 +263,10 @@
            }
        }
        List<ZTreeNode> roleTreeList = this.menuService.menuTreeList(ids);
        // 分公司(type=2)和供应商(type=3)需要根据经营范围过滤菜单
        if (tCompany.getType() == 2 || tCompany.getType() == 3) {
            roleTreeList = filterMenusByBusinessScope(roleTreeList, tCompany);
        }
        roleTreeList.add(ZTreeNode.createParent());
        return roleTreeList;
    }
@@ -261,9 +291,17 @@
        }
        if (ToolUtil.isEmpty(menuIds)) {
            List<ZTreeNode> roleTreeList = this.menuService.menuTreeList(ids);
            // 分公司(type=2)和供应商(type=3)需要根据经营范围过滤菜单
            if (tCompany.getType() == 2 || tCompany.getType() == 3) {
                roleTreeList = filterMenusByBusinessScope(roleTreeList, tCompany);
            }
            return roleTreeList;
        } else {
            List<ZTreeNode> roleTreeListByUserId = this.menuService.menuTreeListByMenuIds(menuIds, ids);
            // 分公司(type=2)和供应商(type=3)需要根据经营范围过滤菜单
            if (tCompany.getType() == 2 || tCompany.getType() == 3) {
                roleTreeListByUserId = filterMenusByBusinessScope(roleTreeListByUserId, tCompany);
            }
            return roleTreeListByUserId;
        }
    }
@@ -292,4 +330,39 @@
        }
    }
    /**
     * 根据企业经营范围过滤菜单
     * @param menuList 原始菜单列表
     * @param company 企业信息
     * @return 过滤后的菜单列表
     */
    private List<ZTreeNode> filterMenusByBusinessScope(List<ZTreeNode> menuList, TCompany company) {
        List<String> excludeMenuNames = new ArrayList<>();
        // isSpe=2 不经营快车
        if (company.getIsSpe() != null && company.getIsSpe() == 2) {
            excludeMenuNames.addAll(SPE_MENUS);
        }
        // isTaxi=2 不经营出租车
        if (company.getIsTaxi() != null && company.getIsTaxi() == 2) {
            excludeMenuNames.addAll(TAXI_MENUS);
        }
        // isCross=2 不经营跨城
        if (company.getIsCross() != null && company.getIsCross() == 2) {
            excludeMenuNames.addAll(CROSS_MENUS);
        }
        // isHitchRide=2 不经营顺风车
        if (company.getIsHitchRide() != null && company.getIsHitchRide() == 2) {
            excludeMenuNames.addAll(HITCH_RIDE_MENUS);
        }
        if (excludeMenuNames.isEmpty()) {
            return menuList;
        }
        return menuList.stream()
            .filter(node -> !excludeMenuNames.contains(node.getName()))
            .collect(Collectors.toList());
    }
}