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/general/TDriverController.java | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 150 insertions(+), 3 deletions(-)
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
index a3f6ccb..e6d8788 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -66,6 +66,9 @@
private ITCompanyService tCompanyService;
@Autowired
+ private ITCompanyCityService tCompanyCityService;
+
+ @Autowired
private ITDriverServiceService tDriverServiceService;
@Autowired
@@ -172,7 +175,7 @@
public String tDriverAdd(Model model) {
List<TCompany> companyList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 2).eq("state", 0).ne("flag", 3));
model.addAttribute("companyList", companyList);
-
+
Integer roleType = shiroExtUtil.getUser().getRoleType();
model.addAttribute("roleType", roleType);
if (2 == roleType) {
@@ -185,7 +188,13 @@
model.addAttribute("franchiseeList", null);
}
//查询当前用户所属分公司/加盟商
- model.addAttribute("objectName", tCompanyService.selectById(shiroExtUtil.getUser().getObjectId()).getName());
+ TCompany currentCompany = tCompanyService.selectById(shiroExtUtil.getUser().getObjectId());
+ model.addAttribute("objectName", currentCompany.getName());
+ // 分公司/加盟商账号传入公司经营业务信息和经营区域
+ if (2 == roleType || 3 == roleType) {
+ model.addAttribute("companyData", currentCompany);
+ model.addAttribute("companyId", currentCompany.getId());
+ }
//查询线路列表
if(1 != roleType){
@@ -276,6 +285,12 @@
} else if (2 == roleType) {
List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("state", 0).ne("flag", 3).eq("superiorId", shiroExtUtil.getUser().getObjectId()));
model.addAttribute("franchiseeList", franchiseeList);
+ // 分公司账号传入公司ID用于加载经营区域
+ model.addAttribute("currentCompanyId", shiroExtUtil.getUser().getObjectId());
+ } else if (3 == roleType) {
+ // 加盟商账号传入上级分公司ID用于加载经营区域
+ TCompany franchisee = tCompanyService.selectById(shiroExtUtil.getUser().getObjectId());
+ model.addAttribute("currentCompanyId", franchisee.getSuperiorId());
}
//查询平台ID
@@ -641,7 +656,42 @@
map.put("list", list);
TCompany company = tCompanyService.selectById(oneId);
map.put("company", company);
+ // 获取公司经营区域
+ List<TCompanyCity> companyCityList = tCompanyCityService.selectList(
+ new EntityWrapper<TCompanyCity>().eq("companyId", oneId).eq("state", 1));
+ map.put("companyCityList", companyCityList);
return map;
+ }
+
+ /**
+ * 根据公司ID获取经营区域列表(省市区联动)
+ */
+ @RequestMapping(value = "/getCompanyCityList")
+ @ResponseBody
+ public Object getCompanyCityList(@RequestParam Integer companyId) {
+ List<TCompanyCity> list = tCompanyCityService.selectList(
+ new EntityWrapper<TCompanyCity>().eq("companyId", companyId).eq("state", 1));
+ // 获取区域详细信息
+ List<Map<String, Object>> result = new ArrayList<>();
+ for (TCompanyCity city : list) {
+ Map<String, Object> item = new HashMap<>();
+ item.put("id", city.getId());
+ item.put("provinceCode", city.getProvinceCode());
+ item.put("cityCode", city.getCityCode());
+ item.put("areaCode", city.getAreaCode());
+ // 获取省市区名称
+ TRegion province = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", city.getProvinceCode()));
+ TRegion cityRegion = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", city.getCityCode()));
+ TRegion area = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", city.getAreaCode()));
+ item.put("provinceName", province != null ? province.getName() : "");
+ item.put("cityName", cityRegion != null ? cityRegion.getName() : "");
+ item.put("areaName", area != null ? area.getName() : "");
+ item.put("provinceId", province != null ? province.getId() : "");
+ item.put("cityId", cityRegion != null ? cityRegion.getId() : "");
+ item.put("areaId", area != null ? area.getId() : "");
+ result.add(item);
+ }
+ return result;
}
@@ -2038,6 +2088,19 @@
}
}
+ // 校验经营业务是否在公司经营范围内
+ TCompany company = itCompanyService.selectById(companyId);
+ String serviceError = validateDriverService(company, "是".equals(nine), "是".equals(ten), "是".equals(eleven));
+ if (serviceError != null) {
+ return new ErrorTip(500, serviceError);
+ }
+
+ // 校验从业地是否在公司经营区域内
+ String placeError = validatePlaceOfEmployment(companyId, cell1701);
+ if (placeError != null) {
+ return new ErrorTip(500, placeError);
+ }
+
TDriver driver = new TDriver();
driver.setAccount(fifteen);
driver.setJobNumber(eight);
@@ -2350,7 +2413,20 @@
if (companyId == 0 && franchiseeId == 0) {
return new ErrorTip(500, "当前登录账户上级分公司不能为空");
}
-
+
+ // 校验经营业务是否在公司经营范围内
+ TCompany company = itCompanyService.selectById(companyId);
+ String serviceError = validateDriverService(company, "是".equals(eight), "是".equals(nine), "是".equals(ten));
+ if (serviceError != null) {
+ return new ErrorTip(500, serviceError);
+ }
+
+ // 校验从业地是否在公司经营区域内
+ String placeError = validatePlaceOfEmployment(companyId, cell1701);
+ if (placeError != null) {
+ return new ErrorTip(500, placeError);
+ }
+
TDriver driver = new TDriver();
driver.setAccount(fourteen);
driver.setJobNumber(seven);
@@ -2463,6 +2539,77 @@
}
/**
+ * 校验经营业务是否在公司经营范围内
+ * @param company 公司
+ * @param isSpe 是否快车
+ * @param isTaxi 是否出租车
+ * @param isCross 是否跨城
+ * @return 错误信息,null表示校验通过
+ */
+ private String validateDriverService(TCompany company, boolean isSpe, boolean isTaxi, boolean isCross) {
+ if (company == null) {
+ return null;
+ }
+ if (isSpe && (company.getIsSpe() == null || company.getIsSpe() != 1)) {
+ return "公司未开通快车业务";
+ }
+ if (isTaxi && (company.getIsTaxi() == null || company.getIsTaxi() != 1)) {
+ return "公司未开通出租车业务";
+ }
+ if (isCross && (company.getIsCross() == null || company.getIsCross() != 1)) {
+ return "公司未开通跨城出行业务";
+ }
+ return null;
+ }
+
+ /**
+ * 校验从业地是否在公司经营区域内
+ * @param companyId 公司ID
+ * @param placeOfEmployment 从业地行政编号
+ * @return 错误信息,null表示校验通过
+ */
+ private String validatePlaceOfEmployment(Integer companyId, String placeOfEmployment) {
+ if (companyId == null || SinataUtil.isEmpty(placeOfEmployment)) {
+ return null;
+ }
+ List<TCompanyCity> companyCityList = tCompanyCityService.selectList(
+ new EntityWrapper<TCompanyCity>().eq("companyId", companyId).eq("state", 1));
+ if (companyCityList == null || companyCityList.isEmpty()) {
+ return null; // 公司没有设置经营区域,不做限制
+ }
+ // 检查从业地是否在公司经营区域内
+ for (TCompanyCity city : companyCityList) {
+ if (city.getAreaCode() != null && placeOfEmployment.equals(String.valueOf(city.getAreaCode()))) {
+ return null; // 匹配区级
+ }
+ if (city.getCityCode() != null && placeOfEmployment.startsWith(String.valueOf(city.getCityCode()).substring(0, 4))) {
+ return null; // 匹配市级
+ }
+ }
+ return "从业地不在公司经营区域内";
+ }
+
+ /**
+ * 获取公司经营区域的默认从业地
+ * @param companyId 公司ID
+ * @return 默认从业地行政编号
+ */
+ private String getDefaultPlaceOfEmployment(Integer companyId) {
+ if (companyId == null) {
+ return null;
+ }
+ List<TCompanyCity> companyCityList = tCompanyCityService.selectList(
+ new EntityWrapper<TCompanyCity>().eq("companyId", companyId).eq("state", 1).last(" limit 1"));
+ if (companyCityList != null && !companyCityList.isEmpty()) {
+ TCompanyCity city = companyCityList.get(0);
+ if (city.getAreaCode() != null) {
+ return String.valueOf(city.getAreaCode());
+ }
+ }
+ return null;
+ }
+
+ /**
* 导出司机信息
*/
@RequestMapping(value = "/outDriver")
--
Gitblit v1.7.1