liujie
2025-08-18 9e91ae67150c35278b69457e5a9b839851af0890
8.18
3个文件已修改
5个文件已添加
555 ■■■■■ 已修改文件
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 195 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverLineMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverLineMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverLine.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TDriverLineService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverLineServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -153,7 +153,6 @@
    }
    /**
     * 获取司机端首页订单列表
     * @param state     1=服务中,2=待服务(30分钟定义预约)
@@ -193,11 +192,11 @@
        int num = 0;
        Double serverMoney = 0D;
        Double totalMoney = 0D;
        for(Map<String, Object> m : order){
        for (Map<String, Object> m : order) {
            num += Integer.valueOf(m.get("peopleNumber").toString());
            totalMoney += Double.valueOf(m.get("payMoney").toString());
            List<Income> incomes = incomeService.queryData(1, null, 2, Integer.valueOf(m.get("orderId").toString()), 3);
            for (Income income : incomes){
            for (Income income : incomes) {
                serverMoney += income.getMoney();
            }
        }
@@ -215,7 +214,6 @@
    }
    /**
     * 走订单流程操作
     * @param orderId
@@ -226,7 +224,7 @@
    @Override
    public ResultUtil process(Integer orderId, Integer state, Double lon, Double lat, String address) throws Exception {
        OrderCrossCity orderCrossCity = this.selectById(orderId);
        switch (state){
        switch (state) {
            case 3://出发前往预约点
                orderCrossCity.setState(3);
                orderCrossCity.setSetOutTime(new Date());
@@ -257,23 +255,25 @@
                //还原座位数
                LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
                lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
                lineShiftDriver.setLaveSeatNumber(
                        (ToolUtil.isNotEmpty(lineShiftDriver.getLaveSeatNumber()) ? lineShiftDriver.getLaveSeatNumber() + ","  : "") +
                                orderCrossCity.getSeatNumber()
                );
                lineShiftDriverMapper.updateById(lineShiftDriver);
                if (lineShiftDriver != null) {
                    lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
                    lineShiftDriver.setLaveSeatNumber(
                            (ToolUtil.isNotEmpty(lineShiftDriver.getLaveSeatNumber()) ? lineShiftDriver.getLaveSeatNumber() + "," : "") +
                                    orderCrossCity.getSeatNumber()
                    );
                    lineShiftDriverMapper.updateById(lineShiftDriver);
                }
                //修改司机空闲状态
                List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryWithin30Minutes(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
                Driver driver = driverService.selectById(orderCrossCity.getDriverId());
                if(orderCrossCities.size() == 0){
                if (orderCrossCities.size() == 0) {
                    driver.setState(2);
                    driverService.updateById(driver);
                }
                Integer placeOrderWay = null;
                switch (orderCrossCity.getOrderSource()){
                switch (orderCrossCity.getOrderSource()) {
                    case 2:
                        placeOrderWay = 4;
                        break;
@@ -292,26 +292,26 @@
                }
                Company company = companyService.selectById(driver.getFranchiseeId());
                if(Objects.isNull(company)){
                if (Objects.isNull(company)) {
                    company = companyService.selectById(driver.getCompanyId());
                }
                // 司机收入
                double moneyTwo;
                // 平台收入
                double money;
                if(orderCrossCity.getOrderSource() == 2 || orderCrossCity.getOrderSource() == 3){
                if (orderCrossCity.getOrderSource() == 2 || orderCrossCity.getOrderSource() == 3) {
                    double v = company.getPercentageDeduction() / 100;
                    money = v * orderCrossCity.getOrderMoney();
                    moneyTwo = orderCrossCity.getOrderMoney()-money;
                }else {
                    moneyTwo = orderCrossCity.getOrderMoney() - money;
                } else {
                    money = company.getFixedDeduction();
                    moneyTwo = orderCrossCity.getOrderMoney()-money;
                    moneyTwo = orderCrossCity.getOrderMoney() - money;
                }
                driver.setBalance(driver.getBalance() + moneyTwo);
                // 新增扣除使用费记录
                transactionDetailsService.saveDataTaxi(driver.getId(), "软件使用费", money, 2, 1, 2, 6, orderCrossCity.getId(),placeOrderWay,company.getId());
                transactionDetailsService.saveDataTaxi(driver.getId(), "软件使用费", money, 2, 1, 2, 6, orderCrossCity.getId(), placeOrderWay, company.getId());
                // 司机订单收入
                transactionDetailsService.saveDataTaxi(driver.getId(), "完成订单", moneyTwo, 1, 1, 2, 3, orderCrossCity.getId(),placeOrderWay,company.getId());
                transactionDetailsService.saveDataTaxi(driver.getId(), "完成订单", moneyTwo, 1, 1, 2, 3, orderCrossCity.getId(), placeOrderWay, company.getId());
                driverService.updateById(driver);
@@ -354,9 +354,9 @@
    public void setOrderCrossCitySort(Integer orderId) throws Exception {
        OrderCrossCity orderCrossCity = this.selectById(orderId);
        List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).ne("state", 10).orderBy("sort"));
        for(int i = 0; i < orderCrossCities.size(); i++){
            if(orderCrossCities.get(i).getId().compareTo(orderId) == 0){
                if(i == 0){
        for (int i = 0; i < orderCrossCities.size(); i++) {
            if (orderCrossCities.get(i).getId().compareTo(orderId) == 0) {
                if (i == 0) {
                    break;
                }
                OrderCrossCity orderCrossCity2 = orderCrossCities.get(i);
@@ -373,9 +373,6 @@
    }
    /**
     * 跨城下单操作
     * @param orderCrossCityWarpper
@@ -389,25 +386,25 @@
         * 先判断司机座位数是否符合出行人数
         */
        LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCityWarpper.getLineShiftDriverId());
        if(orderCrossCityWarpper.getTravelMode() == 1){
            if(lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()){
        if (orderCrossCityWarpper.getTravelMode() == 1) {
            if (lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()) {
                return ResultUtil.error("司机剩余座位数小于出行人数");
            }
        }else{
            if(lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()){
        } else {
            if (lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()) {
                return ResultUtil.error("司机车辆上已经有人占座了,不能下包车订单");
            }
            if(lineShiftDriver.getLaveSeat() == 0){
            if (lineShiftDriver.getLaveSeat() == 0) {
                return ResultUtil.error("司机剩余座位数不足");
            }
        }
        Driver driver = driverService.selectById(orderCrossCityWarpper.getDriverId());
        if(driver.getState() == 1){
        if (driver.getState() == 1) {
            return ResultUtil.error("司机处于离线状态");
        }
        OrderCrossCity orderCrossCity = new OrderCrossCity();
        UserInfo userInfo = userInfoMapper.queryByPhone(orderCrossCityWarpper.getPassengersPhone());
        if(userInfo == null){//添加用户信息
        if (userInfo == null) {//添加用户信息
            userInfo = new UserInfo();
            Integer integer = userInfoMapper.selectCount(null) + 1000001;
            userInfo.setNickName(ToolUtil.isNotEmpty(orderCrossCityWarpper.getPassengers()) ? orderCrossCityWarpper.getPassengers() : "OK" + String.valueOf(integer).substring(1));
@@ -426,20 +423,20 @@
         * 2.下了预约单和再下一张即时单不能再下预约单
         */
        List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(orderCrossCity.getUserId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11);
        if(orderPrivateCars.size() > 0){
        if (orderPrivateCars.size() > 0) {
            return ResultUtil.error("有未完成的订单");
        }
        List<OrderTaxi> list = orderTaxiMapper.queryByState_(orderCrossCity.getUserId(), 1, 1, 1, 2, 3, 4, 5, 6, 11);
        if(list.size() > 0){
        if (list.size() > 0) {
            return ResultUtil.error("有未完成的订单");
        }
        List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(orderCrossCity.getUserId(), 1, 2, 3, 4, 5, 7, 11);
        if(orderCrossCities1.size() > 0){
        if (orderCrossCities1.size() > 0) {
            return ResultUtil.error("有未完成的订单");
        }
        List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(orderCrossCityWarpper.getDriverId(), orderCrossCityWarpper.getLineShiftDriverId(), Arrays.asList(5));
        if(orderCrossCities2.size() > 0){
        if (orderCrossCities2.size() > 0) {
            return ResultUtil.error("司机正在服务中");
        }
@@ -498,52 +495,52 @@
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
        Region region = regionMapper.query(geocode.get("districtCode"));
        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
        if(String.valueOf(map.get("code")).equals("200")){
        if (String.valueOf(map.get("code")).equals("200")) {
            orderCrossCity.setTelX(map.get("telX"));
            orderCrossCity.setBindId(map.get("bindId"));
        }
        if(orderCrossCityWarpper.getTravelMode() == 2){//包车
        if (orderCrossCityWarpper.getTravelMode() == 2) {//包车
            orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber());
            orderCrossCity.setPeopleNumber(lineShiftDriver.getLaveSeat());
        }
        this.insert(orderCrossCity);
        if(driver.getState() == 2){
        if (driver.getState() == 2) {
            driver.setState(3);
            driverService.updateById(driver);
        }
        //修改预约班次的数据
        if(orderCrossCity.getTravelMode() == 2){//包车
        if (orderCrossCity.getTravelMode() == 2) {//包车
            lineShiftDriver.setLaveSeat(0);
            lineShiftDriver.setLaveSeatNumber("");
        }else{//拼车
        } else {//拼车
            lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber());
            String[] split = orderCrossCity.getSeatNumber().split(",");
            String[] split1 = lineShiftDriver.getLaveSeatNumber().split(",");
            String seatNumber = "";
            //先判断选中座位号和剩余座位号是否匹配
            for(String spl : split){
            for (String spl : split) {
                boolean b = true;
                for(String sp : split1){
                    if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
                for (String sp : split1) {
                    if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) {
                        b = false;
                        break;
                    }
                }
                if(b){
                if (b) {
                    throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
                }
            }
            for(String sp : split1){
            for (String sp : split1) {
                boolean b = true;
                for(String spl : split){
                    if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
                for (String spl : split) {
                    if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) {
                        b = false;
                        break;
                    }
                }
                if(b && ToolUtil.isNotEmpty(sp)){
                if (b && ToolUtil.isNotEmpty(sp)) {
                    seatNumber += (sp + ",");
                }
            }
@@ -562,7 +559,7 @@
            @Override
            public void run() {
                OrderCrossCity orderCrossCity1 = orderCrossCityMapper.selectById(orderCrossCity.getId());
                if(orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null){
                if (orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null) {
                    orderCrossCity1.setState(10);
                    orderCrossCityMapper.updateById(orderCrossCity1);
@@ -584,7 +581,7 @@
                    //修改司机为空闲
                    List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
                    if(orderCrossCities.size() == 0){
                    if (orderCrossCities.size() == 0) {
                        Driver driver = driverService.selectById(orderCrossCity.getDriverId());
                        driver.setState(2);
                        driverService.updateById(driver);
@@ -645,8 +642,6 @@
    }
    /**
     * 计算支付金额
     * @param startLonLat
@@ -662,13 +657,11 @@
    public ResultUtil queryOrderMoney(String startLonLat, String endLonLat, Integer peopleNumber, Integer travelMode, Integer lineId,
                                      Integer serverCarModelId, Integer totalSeat, String seatNumber) throws Exception {
        Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1);//调用高德计算距离
        if(null != distance){
        if (null != distance) {
            return this.getPrice(Double.valueOf(distance.get("distance")), peopleNumber, travelMode, lineId, serverCarModelId, totalSeat, seatNumber);
        }
        return ResultUtil.error("计算行程距离出错啦!");
    }
    /**
@@ -683,7 +676,7 @@
    @Override
    public ResultUtil payCrossCityOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception {
        OrderCrossCity orderCrossCity = this.selectById(orderId);
        if(orderCrossCity.getState() != 7){
        if (orderCrossCity.getState() != 7) {
            return ResultUtil.error("订单已被支付,不允许重复支付");
        }
        Integer uid = orderCrossCity.getUserId();
@@ -692,7 +685,7 @@
        orderCrossCity.setCouponMoney(0D);//初始化历史数据
        orderCrossCity.setCouponId(null);
        if(payType == 1){//微信支付
        if (payType == 1) {//微信支付
//            Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayCrossCity", "", type, null);
//            if(map.get("code").equals("200")){
//                paymentRecordService.saveData(1, orderCrossCity.getDriverId(), 2, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据
@@ -701,7 +694,7 @@
//                resultUtil = ResultUtil.error(map.get("msg"), "");
//            }
        }
        if(payType == 2){//支付宝支付
        if (payType == 2) {//支付宝支付
//            Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayCrossCity", "", type, null);
//            if(map.get("code").equals("200")){
//                paymentRecordService.saveData(1, orderCrossCity.getDriverId(), 2, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据
@@ -710,7 +703,7 @@
//                resultUtil = ResultUtil.error(map.get("msg"), "");
//            }
        }
        if(payType == 3){//扫码支付
        if (payType == 3) {//扫码支付
            //调用支付获取收款二维码数据
//            ResultUtil<Map<String, Object>> generate = icbcPayUtil.generate(orderCrossCity.getId() + ",3", orderMoney, orderCrossCity.getInsertTime(), orderCrossCity.getOrderNum(), callbackPath + "/base/order/generatePay");
//            resultUtil = ResultUtil.success(generate.getData().get("qrcode").toString());
@@ -719,7 +712,6 @@
        this.updateAllColumnById(orderCrossCity);
        return resultUtil;
    }
    /**
@@ -732,10 +724,10 @@
    @Override
    public void payOrderCrossCityCallback(Integer id, String order_id, Integer type) throws Exception {
        OrderCrossCity orderCrossCity = this.selectById(id);
        if(orderCrossCity.getState() == 7){
        if (orderCrossCity.getState() == 7) {
            PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getDriverId(), 2, id, 3, type, 1);
            if(null == query){
                System.err.println("预支付数据异常(orderId = "  + id + ")");
            if (null == query) {
                System.err.println("预支付数据异常(orderId = " + id + ")");
            }
            //添加交易明细
            transactionDetailsService.saveData(orderCrossCity.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId());
@@ -787,43 +779,43 @@
        String lon = orderPosition.getLon();
        String lat = orderPosition.getLat();
        OrderCrossCity order = this.selectById(orderId);
        if(null == order){
        if (null == order) {
            System.err.println("订单数据异常:" + orderId);
            return false;
        }
        //跨城记录所有服务完成之前的订单服务距离
        List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", order.getOrderNum()).eq("isDelete", 1).in("state", Arrays.asList(2, 3, 4, 5)));
        for(OrderCrossCity orderCrossCity : orderCrossCities){
        for (OrderCrossCity orderCrossCity : orderCrossCities) {
            boolean b = false;
            OrderPosition orderPosition1 = orderPositionService.queryNew(orderCrossCity.getId(), 3);
            if(null != orderPosition1){
            if (null != orderPosition1) {
                String now = lon + "," + lat;
                String old = orderPosition1.getLon() + "," + orderPosition1.getLat();
//                Map<String, String> distance = gdMapElectricFenceUtil.getDistance(now, old, 0);//直线距离
                Map<String, Double> distance = geodesyUtil.getDistance(now, old);
                if(null != distance){
                if (null != distance) {
                    Double distance1 = distance.get("WGS84");
                    if(Double.valueOf(distance1) > 50 && orderCrossCity.getState() == 5){//大于50米表示在移动
                    if (Double.valueOf(distance1) > 50 && orderCrossCity.getState() == 5) {//大于50米表示在移动
                        orderCrossCity.setMileage(new BigDecimal(orderCrossCity.getMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                        this.updateById(orderCrossCity);
                        b = true;
                    }
                }else{
                } else {
                    System.err.println("调用高德计算距离出错");
                }
            }else{
            } else {
                orderCrossCity.setMileage(0D);
                this.updateById(orderCrossCity);
                b = true;//第一条数据不作处理,直接存储
            }
            if(b){
            if (b) {
                //先计算里程,在存储最新位置
                orderPosition.setInsertTime(new Date());
                //将数据存储到文件中
                List<OrderPosition> orderPositions = orderPositionService.queryPosition(orderCrossCity.getId(), 3);
                File file = new File(filePath + orderCrossCity.getId() + "_3" + ".txt");
                if(!file.exists()){
                if (!file.exists()) {
                    file.getParentFile().mkdirs();
                    file.createNewFile();
                }
@@ -865,8 +857,8 @@
     * @param seatNumber
     * @return
     */
    public ResultUtil<Map<String, Object>> getPrice(Double distance, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber){
        if(0 >= peopleNumber && peopleNumber > 6){
    public ResultUtil<Map<String, Object>> getPrice(Double distance, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber) {
        if (0 >= peopleNumber && peopleNumber > 6) {
            return ResultUtil.error("请输入正确的乘车人数");
        }
@@ -881,39 +873,39 @@
         * 4.浮动计费拼车如果选中中间特殊位置既享受优惠系数又享受中间特殊位置的优惠折扣
         */
        Map<String, Object> query = linePriceMapper.query(lineId, serverCarModelId);
        if(null == query){
        if (null == query) {
            map.put("distance", 0);
            map.put("price", 0);
            return ResultUtil.success(map);
        }
        String content = query.get("content").toString();
        JSONObject jsonObject = JSON.parseObject(content);
        if(Integer.valueOf(query.get("type").toString()) == 1){//固定金额
        if (Integer.valueOf(query.get("type").toString()) == 1) {//固定金额
            double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue();
            double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue();
            double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue();
            double num4 = Double.valueOf(jsonObject.getString("num4")).doubleValue();
            if(travelMode == 1){//拼车
            if (travelMode == 1) {//拼车
                String[] split = seatNumber.split(",");
                boolean b = false;
                for(String s : split){
                    if((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))){
                for (String s : split) {
                    if ((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))) {
                        b = true;
                        break;
                    }
                }
                double price1 = 0D;
                if(b){
                if (b) {
                    price1 = num1 * (totalSeat == 4 ? num3 : num4);
                    peopleNumber -= 1;
                }
                double price = (num1 * peopleNumber) + price1;
                map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            }else{
            } else {
                map.put("price", num2);//包车价
            }
        }else{//浮动计费
        } else {//浮动计费
            //计算公式:实际历程 * 基础单价 * (参考费用 / (参考里程 * 基础单价)) + (实际历程 - 参考里程) * 基础单价 * 优惠系数
            double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue();//参考费用
            double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue();//参考里程
@@ -922,24 +914,24 @@
            double num5 = Double.valueOf(jsonObject.getString("num5")).doubleValue();//包车系数
            double num6 = Double.valueOf(jsonObject.getString("num6")).doubleValue();//五座系数
            double num7 = Double.valueOf(jsonObject.getString("num7")).doubleValue();//七座系数
            if(travelMode == 1){//拼车
            if (travelMode == 1) {//拼车
                double unitPrice = (distance1 * num3 * (num1 / (num2 * num3))) + ((distance1 - num2) * num3 * num4);
                String[] split = seatNumber.split(",");
                boolean b = false;
                for(String s : split){
                    if((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))){
                for (String s : split) {
                    if ((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))) {
                        b = true;
                        break;
                    }
                }
                double price1 = 0D;
                if(b){
                if (b) {
                    price1 = unitPrice * (totalSeat == 4 ? num6 : num7);
                    peopleNumber -= 1;
                }
                double price = (unitPrice * peopleNumber) + price1;
                map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            }else{
            } else {
                double unitPrice = (distance1 * num3 * (num1 / (num2 * num3))) + ((distance1 - num2) * num3 * num5);
                double price = unitPrice * totalSeat;
                map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
@@ -949,24 +941,22 @@
    }
    /**
     * 获取订单编号
     * @return
     * @throws Exception
     */
    @Override
    public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception{
    public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception {
        List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryOrders(driverId, lineShiftDriverId, Arrays.asList(2, 3, 4, 7));
        if(orderCrossCities.size() > 0){
        if (orderCrossCities.size() > 0) {
            return orderCrossCities.get(0).getOrderNum();
        }
        int size = this.selectCount(null);
        while (true){
        while (true) {
            String orderNum = "CROSS" + String.valueOf(1000000 + size + 1).substring(1);
            List<OrderCrossCity> orderNum1 = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderNum));
            if(orderNum1.size() == 0){
            if (orderNum1.size() == 0) {
                return orderNum;
            }
            size++;
@@ -984,10 +974,10 @@
    public synchronized ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception {
        OrderCrossCity orderCrossCity = selectById(orderId);
        if(orderCrossCity.getState() == 9){
        if (orderCrossCity.getState() == 9) {
            return ResultUtil.error("订单已取消");
        }
        if(orderCrossCity.getState() != 1){
        if (orderCrossCity.getState() != 1) {
            return ResultUtil.error("手速有点慢哦,订单已被抢啦!");
        }
        Driver driver = driverService.selectById(uid);
@@ -1012,7 +1002,6 @@
//        }
        orderCrossCity.setDriverId(uid);
        orderCrossCity.setCarId(driver.getCarId());
        orderCrossCity.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
@@ -1029,14 +1018,14 @@
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
        Region region = regionMapper.query(geocode.get("districtCode"));
        Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1)));
        if(String.valueOf(map.get("code")).equals("200")){
        if (String.valueOf(map.get("code")).equals("200")) {
            orderCrossCity.setTelX(map.get("telX"));
            orderCrossCity.setBindId(map.get("bindId"));
        }
        this.updateById(orderCrossCity);
           //修改司机为服务中
        //修改司机为服务中
        if (driver.getState() == 2) {
            driver.setState(3);
@@ -1139,7 +1128,7 @@
        new Thread(new Runnable() {
            @Override
            public void run() {
                if(pushMinistryOfTransport){
                if (pushMinistryOfTransport) {
                    //上传数据
                    pushMinistryOfTransportUtil.orderCreate(orderId);
                    pushMinistryOfTransportUtil.orderMatch(orderId);
@@ -1147,11 +1136,11 @@
            }
        }).start();
        //发送短信
        try{
        try {
            Car car = carService.selectById(orderCrossCity.getCarId());
            SMSUtil.send(orderCrossCity.getPassengersPhone(), "您的订单已被司机" + driver.getName() + "接单,联系电话" + driver.getPhone() + "车牌号" + car.getCarLicensePlate() + "请耐心等待。", "2431012312845");
//            String sData = aLiSendSms.sendSms(orderPrivateCar.getPassengersPhone(), "SMS_476900230", "{\"code1\":\"" + driver.getName() + "\",\"code2\":\"" + driver.getPhone() + "\",\"code3\":\"" + car.getCarLicensePlate() + "\"}");
        }catch (Exception e){
        } catch (Exception e) {
        }
        return ResultUtil.success();
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TDriverLineMapper.java
New file
@@ -0,0 +1,15 @@
package com.stylefeng.guns.modular.system.dao;
import com.stylefeng.guns.modular.system.model.TDriverLine;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author xy
* @description 针对表【t_driver_line(司机关联线路)】的数据库操作Mapper
* @createDate 2025-08-14 16:44:12
* @Entity com.stylefeng.guns.modular.system.model.TDriverLine
*/
public interface TDriverLineMapper extends BaseMapper<TDriverLine> {
}
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TDriverLineMapper.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stylefeng.guns.modular.system.dao.TDriverLineMapper">
    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TDriverLine">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="driverid" column="driverId" jdbcType="INTEGER"/>
            <result property="lineid" column="lineId" jdbcType="INTEGER"/>
            <result property="createtime" column="createTime" jdbcType="TIMESTAMP"/>
            <result property="addtime" column="addTime" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,driverId,lineId,
        createTime,addTime
    </sql>
</mapper>
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriverLine.java
New file
@@ -0,0 +1,160 @@
package com.stylefeng.guns.modular.system.model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
/**
 * 司机关联线路
 * @TableName t_driver_line
 */
@TableName(value ="t_driver_line")
public class TDriverLine implements Serializable {
    /**
     *
     */
    @TableId
    private Integer id;
    /**
     * 司机id
     */
    private Integer driverid;
    /**
     * 线路id
     */
    private Integer lineid;
    /**
     * 创建时间
     */
    private Date createtime;
    /**
     * 添加时间【后台使用】
     */
    private String addtime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    public Integer getId() {
        return id;
    }
    /**
     *
     */
    public void setId(Integer id) {
        this.id = id;
    }
    /**
     * 司机id
     */
    public Integer getDriverid() {
        return driverid;
    }
    /**
     * 司机id
     */
    public void setDriverid(Integer driverid) {
        this.driverid = driverid;
    }
    /**
     * 线路id
     */
    public Integer getLineid() {
        return lineid;
    }
    /**
     * 线路id
     */
    public void setLineid(Integer lineid) {
        this.lineid = lineid;
    }
    /**
     * 创建时间
     */
    public Date getCreatetime() {
        return createtime;
    }
    /**
     * 创建时间
     */
    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }
    /**
     * 添加时间【后台使用】
     */
    public String getAddtime() {
        return addtime;
    }
    /**
     * 添加时间【后台使用】
     */
    public void setAddtime(String addtime) {
        this.addtime = addtime;
    }
    @Override
    public boolean equals(Object that) {
        if (this == that) {
            return true;
        }
        if (that == null) {
            return false;
        }
        if (getClass() != that.getClass()) {
            return false;
        }
        TDriverLine other = (TDriverLine) that;
        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
            && (this.getDriverid() == null ? other.getDriverid() == null : this.getDriverid().equals(other.getDriverid()))
            && (this.getLineid() == null ? other.getLineid() == null : this.getLineid().equals(other.getLineid()))
            && (this.getCreatetime() == null ? other.getCreatetime() == null : this.getCreatetime().equals(other.getCreatetime()))
            && (this.getAddtime() == null ? other.getAddtime() == null : this.getAddtime().equals(other.getAddtime()));
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
        result = prime * result + ((getDriverid() == null) ? 0 : getDriverid().hashCode());
        result = prime * result + ((getLineid() == null) ? 0 : getLineid().hashCode());
        result = prime * result + ((getCreatetime() == null) ? 0 : getCreatetime().hashCode());
        result = prime * result + ((getAddtime() == null) ? 0 : getAddtime().hashCode());
        return result;
    }
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", driverid=").append(driverid);
        sb.append(", lineid=").append(lineid);
        sb.append(", createtime=").append(createtime);
        sb.append(", addtime=").append(addtime);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }
}
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/TDriverLineService.java
New file
@@ -0,0 +1,13 @@
package com.stylefeng.guns.modular.system.service;
import com.stylefeng.guns.modular.system.model.TDriverLine;
import com.baomidou.mybatisplus.service.IService;
/**
* @author xy
* @description 针对表【t_driver_line(司机关联线路)】的数据库操作Service
* @createDate 2025-08-14 16:44:12
*/
public interface TDriverLineService extends IService<TDriverLine> {
}
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -371,12 +371,12 @@
                break;
            case 3://城际
                map = orderCrossCityService.queryPushOrder(orderId);
                String order2 = String.valueOf(map.get("startLon")) + "," + String.valueOf(map.get("startLat"));
                String distance2 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, order2, 1).get("distance");
                String order2 =  String.valueOf(map.get("startLat"))  + "," +String.valueOf(map.get("startLon"));
                String distance2 = gdMapElectricFenceUtil.getDistance(lat + "," + lon, order2, 1).get("distance");
                map.put("startDistance", ToolUtil.isNotEmpty(distance2) ? Double.valueOf(distance2) / 1000 : 0);
                //总距离
                String end2 = String.valueOf(map.get("endLon")) + "," + String.valueOf(map.get("endLat"));
                String end2 =String.valueOf(map.get("endLat"))  + "," + String.valueOf(map.get("endLon")) ;
                distance = gdMapElectricFenceUtil.getDistance(end2, order2, 1).get("distance");
                map.put("totalDistance", ToolUtil.isNotEmpty(distance) ? Double.valueOf(distance) / 1000 : 0);
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -464,73 +464,78 @@
        OrderCrossCity tOrderCrossCity = orderCrossCityService.selectById(tReassign.getOrderId());
        Driver oldDriver = driverService.selectById(tReassign.getOriginalDriverId());
        LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(tOrderCrossCity.getLineShiftDriverId());
        lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
                lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber());
        String seat = "";
        String[] split = tOrderCrossCity.getSeatNumber().split(",");
        for(String s : split){
            seat += s + ",";
        }
        seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
        if(lineShiftDriver!=null){
            lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat() ?
                    lineShiftDriver.getTotalSeat() : lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber());
        //总和大于总座位数的情况
        if(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
            seat = "";
            for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
                seat += i + ",";
            String seat = "";
            String[] split = tOrderCrossCity.getSeatNumber().split(",");
            for(String s : split){
                seat += s + ",";
            }
            seat = seat.substring(0, seat.length() - 1);
        }
        lineShiftDriver.setLaveSeatNumber(seat);
        lineShiftDriverMapper.updateById(lineShiftDriver);
        if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
            oldDriver.setState(2);
            driverService.updateById(oldDriver);
        }
            seat = lineShiftDriver.getLaveSeatNumber() + "," + seat.substring(0, seat.length() - 1);
        //修改新司机数据
        List<LineShiftDriver> query = lineShiftDriverMapper.queryByDriver(lineShiftDriver.getLineShiftId(), driverId, tOrderCrossCity.getTravelTime());
        LineShiftDriver lineShiftDriver1 = null;
            //总和大于总座位数的情况
            if(lineShiftDriver.getLaveSeat() + tOrderCrossCity.getPeopleNumber() > lineShiftDriver.getTotalSeat()){
                seat = "";
                for(int i = 1; i <= lineShiftDriver.getTotalSeat(); i++){
                    seat += i + ",";
                }
                seat = seat.substring(0, seat.length() - 1);
            }
            lineShiftDriver.setLaveSeatNumber(seat);
            lineShiftDriverMapper.updateById(lineShiftDriver);
            if(lineShiftDriver.getLaveSeat() >= lineShiftDriver.getTotalSeat()){
                oldDriver.setState(2);
                driverService.updateById(oldDriver);
            }
        if(query.size() == 0){
            //修改新司机数据
            List<LineShiftDriver> query = lineShiftDriverMapper.queryByDriver(lineShiftDriver.getLineShiftId(), driverId, tOrderCrossCity.getTravelTime());
            LineShiftDriver lineShiftDriver1 = null;
            if(query.size() == 0){
//            return ResultUtil.error("司机没有预约班次");
            CarModel carModel = carModelMapper.selectById(carService.selectById(driverService.selectById(driverId).getCarId()).getCarModelId());
                CarModel carModel = carModelMapper.selectById(carService.selectById(driverService.selectById(driverId).getCarId()).getCarModelId());
            LineShiftDriver lineShiftDriver0 = new LineShiftDriver();
            lineShiftDriver0.setLineShiftId(lineShiftDriver.getLineShiftId());
            lineShiftDriver0.setDriverId(driverId);
            lineShiftDriver0.setDay(lineShiftDriver.getDay());
            lineShiftDriver0.setTotalSeat(carModel.getSeat() - 1);
            lineShiftDriver0.setLaveSeat(carModel.getSeat() - 1);
            lineShiftDriver0.setInserTime(new Date());
            String seatNumber = "";
            for(int i = 1; i < carModel.getSeat(); i++){
                seatNumber += i + ",";
                LineShiftDriver lineShiftDriver0 = new LineShiftDriver();
                lineShiftDriver0.setLineShiftId(lineShiftDriver.getLineShiftId());
                lineShiftDriver0.setDriverId(driverId);
                lineShiftDriver0.setDay(lineShiftDriver.getDay());
                lineShiftDriver0.setTotalSeat(carModel.getSeat() - 1);
                lineShiftDriver0.setLaveSeat(carModel.getSeat() - 1);
                lineShiftDriver0.setInserTime(new Date());
                String seatNumber = "";
                for(int i = 1; i < carModel.getSeat(); i++){
                    seatNumber += i + ",";
                }
                lineShiftDriver0.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1));
                Integer insert = lineShiftDriverMapper.insert(lineShiftDriver0);
                lineShiftDriver1 = lineShiftDriver0;
            }else {
                lineShiftDriver1 = query.get(0);
            }
            lineShiftDriver0.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1));
            if(lineShiftDriver1.getLaveSeat() < tOrderCrossCity.getPeopleNumber()){
                return ResultUtil.runErr("司机车辆剩余座位数不足");
            }
            lineShiftDriver1.setLaveSeat(lineShiftDriver1.getLaveSeat() - tOrderCrossCity.getPeopleNumber());
            String[] split1 = lineShiftDriver1.getLaveSeatNumber().split(",");
            String seat1 = "";//使用
            String seat2 = "";//未使用
            for(int i = 0; i < tOrderCrossCity.getPeopleNumber(); i++){
                seat1 += split1[i] + ",";
            }
            for(int i = tOrderCrossCity.getPeopleNumber(); i < split1.length; i++){
                seat2 += split1[i] + ",";
            }
            lineShiftDriver1.setLaveSeatNumber(seat2);
            lineShiftDriverMapper.updateById(lineShiftDriver1);
        }
            Integer insert = lineShiftDriverMapper.insert(lineShiftDriver0);
            lineShiftDriver1 = lineShiftDriver0;
        }else {
             lineShiftDriver1 = query.get(0);
        }
        if(lineShiftDriver1.getLaveSeat() < tOrderCrossCity.getPeopleNumber()){
            return ResultUtil.runErr("司机车辆剩余座位数不足");
        }
        lineShiftDriver1.setLaveSeat(lineShiftDriver1.getLaveSeat() - tOrderCrossCity.getPeopleNumber());
        String[] split1 = lineShiftDriver1.getLaveSeatNumber().split(",");
        String seat1 = "";//使用
        String seat2 = "";//未使用
        for(int i = 0; i < tOrderCrossCity.getPeopleNumber(); i++){
            seat1 += split1[i] + ",";
        }
        for(int i = tOrderCrossCity.getPeopleNumber(); i < split1.length; i++){
            seat2 += split1[i] + ",";
        }
        lineShiftDriver1.setLaveSeatNumber(seat2);
        lineShiftDriverMapper.updateById(lineShiftDriver1);
        Driver driver = driverService.selectById(driverId);
//        if(driver.getState() == 1){
//            return ResultUtil.error("司机还未上班呢");
@@ -542,9 +547,9 @@
        //修改订单数据
        tOrderCrossCity.setDriverId(driverId);
        tOrderCrossCity.setCarId(driver.getCarId());
        tOrderCrossCity.setSeatNumber(seat1);
//        tOrderCrossCity.setSeatNumber(seat1);
        tOrderCrossCity.setState(tOrderCrossCity.getOldState());
        tOrderCrossCity.setLineShiftDriverId(lineShiftDriver1.getId());
//        tOrderCrossCity.setLineShiftDriverId(lineShiftDriver1.getId());
        tOrderCrossCity.setOldState(null);
        tOrderCrossCity.setIsReassign(2);
        try {
@@ -553,7 +558,7 @@
            e.printStackTrace();
        }
        orderCrossCityService.updateAllColumnById(tOrderCrossCity);
        oldDriver.setState(2);
        //修改专车改派订单
        tReassign.setNowDriverId(driverId);
        tReassign.setNowCarId(driver.getCarId());
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TDriverLineServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.stylefeng.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.modular.system.model.TDriverLine;
import com.stylefeng.guns.modular.system.service.TDriverLineService;
import com.stylefeng.guns.modular.system.dao.TDriverLineMapper;
import org.springframework.stereotype.Service;
/**
 * @author xy
 * @description 针对表【t_driver_line(司机关联线路)】的数据库操作Service实现
 * @createDate 2025-08-14 16:44:12
 */
@Service
public class TDriverLineServiceImpl extends ServiceImpl<TDriverLineMapper, TDriverLine>
        implements TDriverLineService {
}