From 016b2f31b672f3bb1943ce3c2214bee6cba5306b Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 16 一月 2026 09:27:41 +0800
Subject: [PATCH] feat(management):管理后台数据权限

---
 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java |   64 +++++++++++++++++++++++++++++--
 1 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
index 3799d2c..e6a2e73 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -16,9 +16,11 @@
 import com.stylefeng.guns.core.util.KaptchaUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.dao.UserMapper;
+import com.stylefeng.guns.modular.system.dao.TCompanyMapper;
 import com.stylefeng.guns.modular.system.model.Menu;
 import com.stylefeng.guns.modular.system.model.Relation;
 import com.stylefeng.guns.modular.system.model.User;
+import com.stylefeng.guns.modular.system.model.TCompany;
 import com.stylefeng.guns.modular.system.service.IMenuService;
 import com.stylefeng.guns.modular.system.service.IRelationService;
 import com.stylefeng.guns.modular.system.service.IUserService;
@@ -42,6 +44,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -60,7 +64,25 @@
 @Slf4j
 @Controller
 public class LoginController extends BaseController {
-	
+
+	// 快车相关菜单(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;
 	
@@ -75,8 +97,11 @@
 	
 	@Autowired
 	private UserMapper userMapper;
-	
-	
+
+	@Resource
+	private TCompanyMapper companyMapper;
+
+
 	private Map<String, Long> loginTime = new HashMap<>();
 	
 	private Map<String, Integer> loginFailures = new HashMap<>();
@@ -111,6 +136,11 @@
 		Set<Long> collect = relations.stream().map(Relation::getMenuid).collect(Collectors.toSet());
 		List<Menu> menuList = menuService.selectBatchIds(collect);
 		List<MenuNode> menus = menuService.getMenusByRoleIds(roleList);
+		// 根据企业经营范围过滤菜单(在构建树之前过滤)
+		TCompany tCompany = companyMapper.selectById(shiroUser.getObjectId());
+		if (tCompany != null && (tCompany.getType() == 2 || tCompany.getType() == 3)) {
+			menus = filterMenusByBusinessScope(menus, tCompany);
+		}
 		List<MenuNode> titles = MenuNode.buildTitle(menus);
 		titles = ApiMenuFilter.build(titles);
 		shiroUser.setMenuIds(menuList.stream().map(Menu::getUrl).collect(Collectors.toList()));
@@ -246,6 +276,30 @@
 		}
 		return ResultUtil.error(jsonObject.getString("msg"));
 	}
-	
-	
+
+	/**
+	 * 根据企业经营范围过滤菜单
+	 */
+	private List<MenuNode> filterMenusByBusinessScope(List<MenuNode> menuList, TCompany company) {
+		List<String> excludeMenuNames = new ArrayList<>();
+		if (company.getIsSpe() != null && company.getIsSpe() == 2) {
+			excludeMenuNames.addAll(SPE_MENUS);
+		}
+		if (company.getIsTaxi() != null && company.getIsTaxi() == 2) {
+			excludeMenuNames.addAll(TAXI_MENUS);
+		}
+		if (company.getIsCross() != null && company.getIsCross() == 2) {
+			excludeMenuNames.addAll(CROSS_MENUS);
+		}
+		if (company.getIsHitchRide() != null && company.getIsHitchRide() == 2) {
+			excludeMenuNames.addAll(HITCH_RIDE_MENUS);
+		}
+		if (excludeMenuNames.isEmpty()) {
+			return menuList;
+		}
+		menuList.removeIf(node -> excludeMenuNames.contains(node.getName()));
+		return menuList;
+	}
+
+
 }

--
Gitblit v1.7.1