puzhibing
2026-01-23 e9259901aa1137ab81c309ccc30aaa34e4e6993f
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -45,6 +45,7 @@
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 司机审核列表控制器
@@ -65,6 +66,9 @@
    private ITCompanyService tCompanyService;
    @Autowired
    private ITCompanyCityService tCompanyCityService;
    @Autowired
    private ITDriverServiceService tDriverServiceService;
    @Autowired
@@ -72,6 +76,9 @@
    @Autowired
    private ITLineService itLineService;
    @Autowired
    private ITRegionService tRegionService;
    
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
@@ -102,7 +109,11 @@
    
    @Autowired
    private ShiroExtUtil shiroExtUtil;
    @Autowired
    private IDriverWorkService iDriverWorkService;
    @Autowired
    private ITRegionService regionService;
    /**
     * 跳转投诉页面
     *
@@ -164,27 +175,41 @@
     */
    @RequestMapping("/tDriver_add")
    public String tDriverAdd(Model model) {
        List<TCompany> companyList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 2));
        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) {
            List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>()
                    .eq("type", 3)
                    .eq("superiorId", shiroExtUtil.getUser().getObjectId())
                    .notIn("state", 1)
                    .notIn("flag", 3));
                    .eq("state", 0).ne("flag", 3));
            model.addAttribute("franchiseeList", franchiseeList);
        } else {
            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());
        }
        //查询线路列表
        List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1));
        model.addAttribute("lineList",lineList);
        if(1 != roleType){
            Integer objectId = shiroExtUtil.getUser().getObjectId();
            List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1).last(" and (id in (select lineId from t_line_company where companyId = " + objectId + ") or companyId = " + objectId + ")"));
            model.addAttribute("lineList",lineList);
        }else{
            List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1));
            model.addAttribute("lineList",lineList);
        }
        List<TRegion> provinceList = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0));
        model.addAttribute("provinceList",provinceList);
        return PREFIX + "tDriver_add.html";
    }
@@ -255,23 +280,31 @@
        model.addAttribute("objectName", tCompanyService.selectById(shiroExtUtil.getUser().getObjectId()).getName());
    
        if (1 == roleType) {
            List<TCompany> companyList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 2).ne("flag", 3));
            List<TCompany> companyList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 2).eq("state", 0).ne("flag", 3));
            model.addAttribute("companyList", companyList);
            List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("superiorId", tDriver.getCompanyId()));
            List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("state", 0).ne("flag", 3).eq("superiorId", tDriver.getCompanyId()));
            model.addAttribute("franchiseeList", franchiseeList);
        } else if (2 == roleType) {
            List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("type", 3).eq("superiorId", shiroExtUtil.getUser().getObjectId()));
            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
        TCompany company = tCompanyService.selectOne(new EntityWrapper<TCompany>().eq("type", 1));
        TCompany company = tCompanyService.selectOne(new EntityWrapper<TCompany>().eq("type", 1).eq("state", 0).ne("flag", 3));
        //判断是平台司机还是加盟司机
        if ((SinataUtil.isEmpty(tDriver.getCompanyId()) || tDriver.getCompanyId() == 0 || tDriver.getCompanyId() == company.getId()) && (SinataUtil.isEmpty(tDriver.getFranchiseeId()) || tDriver.getFranchiseeId() == 0)){
        if ((SinataUtil.isEmpty(tDriver.getCompanyId()) || tDriver.getCompanyId() == 0 || tDriver.getCompanyId().equals(company.getId())) && (SinataUtil.isEmpty(tDriver.getFranchiseeId()) || tDriver.getFranchiseeId() == 0)){
            model.addAttribute("companyType",1);
        }else{
            model.addAttribute("companyType",2);
        }
        model.addAttribute("companyData",tCompanyService.selectById(tDriver.getCompanyId()));
        //获取经营业务
        List<TDriverService> serviceList = tDriverServiceService.selectList(new EntityWrapper<TDriverService>().eq("driverId", tDriverId));
@@ -309,11 +342,47 @@
        model.addAttribute("six",six);
        //查询线路列表
        List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1));
        model.addAttribute("lineList",lineList);
        if(1 != roleType){
            Integer objectId = shiroExtUtil.getUser().getObjectId();
            List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1).last(" and (id in (select lineId from t_line_company where companyId = " + objectId + ") or companyId = " + objectId + ")"));
            model.addAttribute("lineList",lineList);
        }else{
            List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1));
            model.addAttribute("lineList",lineList);
        }
        //查询驾驶员已添加的线路列表
        List<Map<String, Object>> driverLineList = tDriverLineService.getDriverLineListByDriverId(tDriverId);
        model.addAttribute("driverLineList",driverLineList);
        model.addAttribute("provinceId", 1);
        model.addAttribute("cityId","");
        model.addAttribute("areaId","");
        model.addAttribute("provinceId", "");
        model.addAttribute("areaList", new ArrayList<>());
        model.addAttribute("cityList", new ArrayList<>());
        if(ToolUtil.isNotEmpty(tDriver.getPlaceOfEmployment())){
            TRegion area = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", tDriver.getPlaceOfEmployment()));
            if(null != area) {
                model.addAttribute("areaId", area.getId());
                TRegion city = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("id", area.getParentId()));
                if (null != city) {
                    model.addAttribute("cityId", city.getId());
                    TRegion province = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("id", city.getParentId()));
                    if (null != province) {
                        model.addAttribute("provinceId", province.getId());
                    }
                    //市
                    List<TRegion> cityList = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", city.getParentId()));
                    model.addAttribute("cityList", cityList);
                }
                //区
                List<TRegion> areaList = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", area.getParentId()));
                model.addAttribute("areaList",areaList);
            }
        }
        //省
        List<TRegion> provinceList = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0));
        model.addAttribute("provinceList",provinceList);
        return PREFIX + "tDriver_edit.html";
    }
@@ -569,6 +638,95 @@
    }
    /**
     * 用于获取公司的经营业务【202601】
     *
     * @param oneId
     * @return
     */
    @RequestMapping(value = "/twoChange")
    @ResponseBody
    public Object twoChange(@RequestParam Integer oneId) {
        List<TCompany> list = new ArrayList<>();
        if (SinataUtil.isNotEmpty(oneId)){
            list = tCompanyService.selectList(new EntityWrapper<TCompany>()
                    .eq("type", 3)
                    .eq("superiorId", oneId)
                    .notIn("flag",3)
                    .notIn("state",1));
        }
        HashMap<String, Object> map = new HashMap<>();
        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;
    }
    @RequestMapping(value = "/listLine")
    @ResponseBody
    public Object listLine(String oneId) {
        Integer objectId = shiroExtUtil.getUser().getObjectId();
        if(objectId==1){
            if(oneId==null || oneId.equals("") || oneId.equals("1")){
                List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1));
                return lineList;
            }else {
                List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1).last(" and (id in (select lineId from t_line_company where companyId = " + oneId + ") or companyId = " + oneId + ")"));
                return lineList;
            }
        }else {
            TCompany company = tCompanyService.selectById(objectId);
            oneId = company.getId().toString();
            if(shiroExtUtil.getUser().getRoleType()==3){
                TCompany company1 = tCompanyService.selectById(company.getSuperiorId());
                oneId = company1.getId().toString();
            }
            List<TLine> lineList = itLineService.selectList(new EntityWrapper<TLine>().eq("state", 1).last(" and (id in (select lineId from t_line_company where companyId = " + oneId + ") or companyId = " + oneId + ")"));
            return lineList;
        }
    }
    /**
     * 获取司机审核列表列表
     */
    @RequestMapping(value = "/list")
@@ -694,7 +852,7 @@
                    request.setEmpName(tDriver.getName());
                    request.setEmpNickname(tDriver.getName());
                    request.setLoginNo(tDriver.getPhone());
                    request.setEmpSex(tDriver.getSex() == 1 ? "男" : "女");
                    request.setEmpSex(null != tDriver.getSex() && tDriver.getSex() == 1 ? "男" : "女");
                    request.setMphone(tDriver.getPhone());
                    request.setEmail(tDriver.getPhone() + "@qyt.com");
                    request.setDeptId(0);
@@ -730,10 +888,14 @@
    public Object selectCarOpt(Integer tDriverId,Integer carId) {
        if (SinataUtil.isNotEmpty(tDriverId) && SinataUtil.isNotEmpty(carId)){
            TDriver tDriver = tDriverService.selectById(tDriverId);
            DriverWork driverWork = iDriverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", tDriverId).eq("state", 1));
            if(null != driverWork && !tDriver.getCarId().equals(carId)){
                return ResultUtil.error("司机上班中,不能更换车辆");
            }
            tDriver.setCarId(carId);
            tDriverService.updateById(tDriver);
        }
        return SUCCESS_TIP;
        return ResultUtil.success();
    }
    /**
@@ -747,6 +909,14 @@
        if (count > 0){
            return "error";
        }
        if(ToolUtil.isEmpty(tDriver.getIdCard())){
            return "身份证号不能为空";
        }
        Boolean b = UserUtil.idCardAuth(tDriver.getName(), tDriver.getIdCard());
        if(!b){
            return "司机姓名和身份证号不匹配";
        }
        if (1 == roleType){  //平台
            if (2 == companyType.intValue()){
                if (SinataUtil.isNotEmpty(oneId)){
@@ -808,7 +978,7 @@
                request.setEmpName(tDriver.getName());
                request.setEmpNickname(tDriver.getName());
                request.setLoginNo(tDriver.getPhone());
                request.setEmpSex(tDriver.getSex() == 1 ? "男" : "女");
                request.setEmpSex(null != tDriver.getSex() && tDriver.getSex() == 1 ? "男" : "女");
                request.setMphone(tDriver.getPhone());
                request.setEmail(tDriver.getPhone() + "@qyt.com");
                request.setDeptId(0);
@@ -962,7 +1132,7 @@
                    request.setEmpName(tDriver.getName());
                    request.setEmpNickname(tDriver.getName());
                    request.setLoginNo(tDriver.getPhone());
                    request.setEmpSex(tDriver.getSex() == 1 ? "男" : "女");
                    request.setEmpSex(null != tDriver.getSex() && tDriver.getSex() == 1 ? "男" : "女");
                    request.setMphone(tDriver.getPhone());
                    request.setEmail(tDriver.getPhone() + "@qyt.com");
                    request.setDeptId(0);
@@ -1005,6 +1175,13 @@
            if (count > 0){
                return "error";
            }
        }
        if(ToolUtil.isEmpty(tDriver.getIdCard())){
            return "身份证号不能为空";
        }
        Boolean b = UserUtil.idCardAuth(tDriver.getName(), tDriver.getIdCard());
        if(!b){
            return "司机姓名和身份证号不匹配";
        }
        if (1 == roleType){  //平台
            if (2 == companyType.intValue()){
@@ -1089,6 +1266,7 @@
        obj.setEmergencyContactAddress(tDriver.getEmergencyContactAddress());
        obj.setUpdateTime(new Date());
        obj.setUpdateUser(shiroExtUtil.getUser().getId());
        obj.setPlaceOfEmployment(tDriver.getPlaceOfEmployment());
        tDriverService.updateAllColumnById(obj);
    
        //删除业务
@@ -1158,6 +1336,7 @@
            shellList.add("经营业务:跨城出行[是/否]");
            shellList.add("登录账号[手机号]");
            shellList.add("登录密码[密码长度为6-18]");
            shellList.add("从业地行政编号");
        } else if (shiroExtUtil.getUser().getRoleType() == 2) {
            title = "分公司导入司机模板";
        
@@ -1175,6 +1354,7 @@
            shellList.add("经营业务:跨城出行[是/否]");
            shellList.add("登录账号[手机号]");
            shellList.add("登录密码[密码长度为6-18]");
            shellList.add("从业地行政编号");
        } else if (shiroExtUtil.getUser().getRoleType() == 3) {
            title = "加盟商导入司机模板";
        
@@ -1191,6 +1371,7 @@
            shellList.add("经营业务:跨城出行[是/否]");
            shellList.add("登录账号[手机号]");
            shellList.add("登录密码[密码长度为6-18]");
            shellList.add("从业地行政编号");
        }
        dataList.add(shellList);
@@ -1214,6 +1395,7 @@
        User user2 = userService.selectById(user.getId());
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = (MultipartFile) multipartRequest.getFile("myfile");
        List<String> drivers = new ArrayList<>();
        try {
            if (shiroExtUtil.getUser().getRoleType() == 1) {
                Workbook book = WoUtil.ImportFile(file);
@@ -1248,7 +1430,7 @@
                                break;
                        }
                    }
                    Cell cell2 = row.getCell(2);  //所属分公司[提示:加盟司机选填]
                    String two = null;
                    if (SinataUtil.isNotEmpty(cell2)) {
@@ -1445,18 +1627,36 @@
                        }
                    }
                    Cell cell20 = row.getCell(16);  //从业地行政编号
                    String cell201 = null;
                    if (SinataUtil.isNotEmpty(cell20)){
                        int cellType = cell20.getCellType();
                        switch (cellType) {
                            case Cell.CELL_TYPE_STRING:
                                cell201 = cell20.getStringCellValue().trim();
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                cell201 = String.valueOf((long)cell20.getNumericCellValue()).trim();
                                break;
                        }
                    }
                    if (SinataUtil.isEmpty(zero) || SinataUtil.isEmpty(one) || SinataUtil.isEmpty(four)
                            || SinataUtil.isEmpty(five) || SinataUtil.isEmpty(six) || SinataUtil.isEmpty(nine)
                            || SinataUtil.isEmpty(eleven) || SinataUtil.isEmpty(twelve) || SinataUtil.isEmpty(thirteen)
                            || SinataUtil.isEmpty(seventeen)|| SinataUtil.isEmpty(eighteen)){
                            || SinataUtil.isEmpty(seventeen)|| SinataUtil.isEmpty(eighteen)|| SinataUtil.isEmpty(cell201)){
                        return new ErrorTip(500, "单元格不能为空");
                    }else{
                        //判断账号是否存在
                        int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", seventeen).in("authState", "1,2,3").ne("flag", 3));
                        int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", seventeen).in("authState", Arrays.asList(1,2,3)).ne("flag", 3));
                        if (count > 0){
                            continue;
                        }
                        Boolean b = UserUtil.idCardAuth(zero, seven);
                        if(!b){
                            drivers.add(zero);
                            continue;
                        }
                        //判断所属机构
                        if (!one.equals("平台司机") && !one.equals("加盟司机")){
                            return new ErrorTip(500, "所属机构内容不正确");
@@ -1488,6 +1688,10 @@
                        //判断登录密码
                        if (!isPassword(eighteen)){
                            return new ErrorTip(500, "登录密码格式不正确");
                        }
                        //从业地行政编号
                        if (!isPassword(cell201)){
                            return new ErrorTip(500, "从业地行政编号不正确");
                        }
                        //查找平台公司
@@ -1539,10 +1743,30 @@
                        driver.setInsertTime(new Date());
                        driver.setAddType(2);
                        driver.setAddObjectId(shiroExtUtil.getUser().getObjectId());
                        driver.setPlaceOfEmployment(cell201);
                        if(ToolUtil.isNotEmpty(cell201)){
                            TRegion tRegion = regionService.selectOne(new EntityWrapper<TRegion>().eq("code", cell201));
                            String placeOfPractice = "";
                            if(null != tRegion){
                                Integer parentId = tRegion.getParentId();
                                if(0 != parentId){
                                    TRegion tRegion1 = regionService.selectById(parentId);
                                    if(0 != tRegion1.getParentId()){
                                        TRegion tRegion2 = regionService.selectById(tRegion1.getParentId());
                                        placeOfPractice = tRegion2.getName() + "," + tRegion1.getName() + "," + tRegion.getName();
                                    }else{
                                        placeOfPractice = tRegion1.getName() + "," + tRegion.getName();
                                    }
                                }else{
                                    placeOfPractice = tRegion.getName();
                                }
                            }
                            driver.setPlaceOfPractice(placeOfPractice);
                        }
                        if (SinataUtil.isNotEmpty(eight)) {
                            driver.setDriverAddress(eight);
                        }
                        //审核通过,在中台添加司机账号
                        if (2 == driver.getAuthState()) {
                            Integer objectId = driver.getCompanyId();
@@ -1557,7 +1781,7 @@
                                saveStaffNodeRequest.setEmpName(driver.getName());
                                saveStaffNodeRequest.setEmpNickname(driver.getName());
                                saveStaffNodeRequest.setLoginNo(driver.getPhone());
                                saveStaffNodeRequest.setEmpSex(driver.getSex() == 1 ? "男" : "女");
                                saveStaffNodeRequest.setEmpSex(null != driver.getSex() && driver.getSex() == 1 ? "男" : "女");
                                saveStaffNodeRequest.setMphone(driver.getPhone());
                                saveStaffNodeRequest.setEmail(driver.getPhone() + "@qyt.com");
                                saveStaffNodeRequest.setDeptId(0);
@@ -1575,15 +1799,15 @@
                                empId = userInfoByPhone.get(0).getEmpId();
                                empnew = 0;
                            }
                            driver.setEmpId(empId);
                            driver.setEntercode(tCompany.getEnterCode());
                            driver.setEnterId(Long.valueOf(tCompany.getEnterCode()));
                            driver.setEmpnew(empnew);
                        }
                        tDriverService.insert(driver);
                        //添加快车服务模式
                        if ("是".equals(eleven)) {
                            TDriverService service = new TDriverService();
@@ -1612,7 +1836,7 @@
                Sheet sh = book.getSheetAt(0);   //获取到第一个表
                for (int i = 1; i <= sh.getLastRowNum(); i++) {
                    Row row = sh.getRow(i);
                    Cell cell0 = row.getCell(0);  //司机名称
                    String zero = null;
                    if (SinataUtil.isNotEmpty(cell0)) {
@@ -1626,7 +1850,7 @@
                                break;
                        }
                    }
                    Cell cell1 = row.getCell(1);  //所属加盟商[选填]
                    String one = null;
                    if (SinataUtil.isNotEmpty(cell1)) {
@@ -1640,7 +1864,7 @@
                                break;
                        }
                    }
                    Cell cell2 = row.getCell(2);  //性别[男/女]
                    String two = null;
                    if (SinataUtil.isNotEmpty(cell2)) {
@@ -1808,15 +2032,36 @@
                                break;
                        }
                    }
                    Cell cell17 = row.getCell(14);  //从业地行政编号
                    String cell1701 = null;
                    if (SinataUtil.isNotEmpty(cell17)){
                        int cellType = cell17.getCellType();
                        switch (cellType) {
                            case Cell.CELL_TYPE_STRING:
                                cell1701 = cell17.getStringCellValue().trim();
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                cell1701 = String.valueOf((long)cell17.getNumericCellValue()).trim();
                                break;
                        }
                    }
                    if (SinataUtil.isEmpty(zero) || SinataUtil.isEmpty(two) || SinataUtil.isEmpty(three) || SinataUtil.isEmpty(four)
                            || SinataUtil.isEmpty(five) || SinataUtil.isEmpty(seven)
                            || SinataUtil.isEmpty(nine) || SinataUtil.isEmpty(ten)
                            || SinataUtil.isEmpty(eleven) || SinataUtil.isEmpty(fifteen) || SinataUtil.isEmpty(sixteen)){
                            || SinataUtil.isEmpty(eleven) || SinataUtil.isEmpty(fifteen)
                            || SinataUtil.isEmpty(sixteen) || SinataUtil.isEmpty(cell1701)){
                        return new ErrorTip(500, "单元格不能为空");
                    }else{
                        //判断账号是否存在
                        int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", fifteen).in("authState", "1,2,3").ne("flag", 3));
                        int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", fifteen).in("authState", Arrays.asList(1,2,3)).ne("flag", 3));
                        if (count > 0){
                            continue;
                        }
                        Boolean b = UserUtil.idCardAuth(zero, five);
                        if(!b){
                            drivers.add(zero);
                            continue;
                        }
                        //判断性别
@@ -1847,6 +2092,12 @@
                        if (!isPassword(sixteen)) {
                            return new ErrorTip(500, "登录密码格式不正确");
                        }
                        //从业地行政编号
                        if (!isPassword(cell1701)) {
                            return new ErrorTip(500, "从业地行政编号不正确");
                        }
                        //查找平台公司
                        Integer companyId = shiroExtUtil.getUser().getObjectId();
                        Integer franchiseeId = 0;
@@ -1857,7 +2108,20 @@
                                franchiseeId = franchisee.getId();
                            }
                        }
                        // 校验经营业务是否在公司经营范围内
                        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, 2);
                        if (placeError != null) {
                            return new ErrorTip(500, placeError);
                        }
                        TDriver driver = new TDriver();
                        driver.setAccount(fifteen);
                        driver.setJobNumber(eight);
@@ -1883,11 +2147,12 @@
                        driver.setInsertTime(new Date());
                        driver.setAddType(3);
                        driver.setAddObjectId(shiroExtUtil.getUser().getObjectId());
                        driver.setPlaceOfEmployment(cell1701);
                        if (SinataUtil.isNotEmpty(six)) {
                            driver.setDriverAddress(six);
                        }
                        tDriverService.insert(driver);
                        //添加快车服务模式
                        if ("是".equals(nine)) {
                            TDriverService service = new TDriverService();
@@ -1909,7 +2174,7 @@
                            service.setType(3);
                            itDriverServiceService.insert(service);
                        }
                    }
                }
            } else if (shiroExtUtil.getUser().getRoleType() == 3) {
@@ -1917,7 +2182,7 @@
                Sheet sh = book.getSheetAt(0);   //获取到第一个表
                for (int i = 1; i <= sh.getLastRowNum(); i++) {
                    Row row = sh.getRow(i);
                    Cell cell0 = row.getCell(0);  //司机名称
                    String zero = null;
                    if (SinataUtil.isNotEmpty(cell0)) {
@@ -1931,7 +2196,7 @@
                                break;
                        }
                    }
                    Cell cell2 = row.getCell(1);  //性别[男/女]
                    String one = null;
                    if (SinataUtil.isNotEmpty(cell2)) {
@@ -1945,7 +2210,7 @@
                                break;
                        }
                    }
                    Cell cell3 = row.getCell(2);  //驾驶证号码
                    String two = null;
                    if (SinataUtil.isNotEmpty(cell3)) {
@@ -2099,15 +2364,35 @@
                                break;
                        }
                    }
                    Cell cell17 = row.getCell(13);  //登录密码[密码长度为6-18]
                    String cell1701 = null;
                    if (SinataUtil.isNotEmpty(cell17)){
                        int cellType = cell17.getCellType();
                        switch (cellType) {
                            case Cell.CELL_TYPE_STRING:
                                cell1701 = cell17.getStringCellValue().trim();
                                break;
                            case Cell.CELL_TYPE_NUMERIC:
                                cell1701 = String.valueOf((long)cell17.getNumericCellValue()).trim();
                                break;
                        }
                    }
                    if (SinataUtil.isEmpty(zero) || SinataUtil.isEmpty(one)  || SinataUtil.isEmpty(two) || SinataUtil.isEmpty(three) || SinataUtil.isEmpty(four)
                            || SinataUtil.isEmpty(six) || SinataUtil.isEmpty(eight)
                            || SinataUtil.isEmpty(nine) || SinataUtil.isEmpty(ten)
                            || SinataUtil.isEmpty(fourteen) || SinataUtil.isEmpty(fifteen) ){
                            || SinataUtil.isEmpty(fourteen) || SinataUtil.isEmpty(fifteen)
                            || SinataUtil.isEmpty(cell1701)){
                        return new ErrorTip(500, "单元格不能为空");
                    }else{
                        //判断账号是否存在
                        int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", fourteen).in("authState", "1,2,3").ne("flag", 3));
                        int count = tDriverService.selectCount(new EntityWrapper<TDriver>().eq("phone", fourteen).in("authState", Arrays.asList(1,2,3)).ne("flag", 3));
                        if (count > 0){
                            continue;
                        }
                        Boolean b = UserUtil.idCardAuth(zero, four);
                        if(!b){
                            drivers.add(zero);
                            continue;
                        }
                        //判断性别
@@ -2149,7 +2434,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, 3);
                        if (placeError != null) {
                            return new ErrorTip(500, placeError);
                        }
                        TDriver driver = new TDriver();
                        driver.setAccount(fourteen);
                        driver.setJobNumber(seven);
@@ -2175,6 +2473,7 @@
                        driver.setInsertTime(new Date());
                        driver.setAddType(4);
                        driver.setAddObjectId(shiroExtUtil.getUser().getObjectId());
                        driver.setPlaceOfEmployment(cell1701);
                        if (SinataUtil.isNotEmpty(five)) {
                            driver.setDriverAddress(five);
                        }
@@ -2203,6 +2502,9 @@
                        }
                    }
                }
            }
            if(drivers.size() > 0){
                return new ErrorTip(500, "司机姓名和身份证号不匹配【" + drivers.stream().collect(Collectors.joining(",")).toString() + "】");
            }
        } catch (Exception e) {
            e.printStackTrace();
@@ -2258,6 +2560,86 @@
    }
    /**
     * 校验经营业务是否在公司经营范围内
     * @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, Integer roleType) {
        if (companyId == null || SinataUtil.isEmpty(placeOfEmployment)) {
            return null;
        }
        if (roleType.equals(3)) {
            //查询该加盟商所属的分公司
            TCompany tCompany = tCompanyService.selectById(companyId);
            if (Objects.nonNull(tCompany) && Objects.nonNull(tCompany.getSuperiorId())) {
                companyId = tCompany.getSuperiorId();
            } else {
                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")
@@ -2296,6 +2678,7 @@
        shellList.add("所属分公司");
        shellList.add("所属加盟商");
        shellList.add("当前车辆");
        shellList.add("当前绑定车辆");
        shellList.add("服务模式");
        shellList.add("关联线路");
        shellList.add("评分");
@@ -2326,7 +2709,7 @@
                shellList.add("-");
            }
            if(SinataUtil.isNotEmpty(object.get("sex"))){
                shellList.add(object.get("sex").toString() == "1"?"男":"女");
                shellList.add(object.get("sex").toString().equals("1")?"男":"女");
            }else{
                shellList.add("-");
            }
@@ -2351,6 +2734,11 @@
            }else{
                shellList.add("-");
            }
            if(SinataUtil.isNotEmpty(object.get("carName"))){
                shellList.add(object.get("carName").toString());
            }else{
                shellList.add("-");
            }
            if(SinataUtil.isNotEmpty(object.get("serverStr"))){
                shellList.add(object.get("serverStr").toString());
            }else{