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