longz
2026-05-18 0ffd0dc267f12e7208ea4c636ff1bf6771d43ad1
fix bugs
9个文件已修改
333 ■■■■■ 已修改文件
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/LineSiteMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineSiteMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/LineSiteWarpper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -27,6 +27,7 @@
import com.stylefeng.guns.modular.system.warpper.MerchantCouponListWarpper;
import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -684,35 +685,70 @@
            lineShiftDriver.setLaveSeatNumber("");
        }else{//拼车
            lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber());
            String[] split = orderCrossCity.getSeatNumber().split(",");
            String[] split1 = lineShiftDriver.getLaveSeatNumber().split(",");
            String seatNumber = "";
            //先判断选中座位号和剩余座位号是否匹配
            for(String spl : split){
                boolean b = true;
                for(String sp : split1){
                    if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
                        b = false;
                        break;
                    }
                }
                if(b){
                    throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
                }
            }
            for(String sp : split1){
                boolean b = true;
            if (StringUtils.isNotEmpty(orderCrossCity.getSeatNumber())){
                // 用户已选座的情况
                String[] split = orderCrossCity.getSeatNumber().split(",");
                String seatNumber = "";
                //先判断选中座位号和剩余座位号是否匹配
                for(String spl : split){
                    if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
                        b = false;
                        break;
                    boolean b = true;
                    for(String sp : split1){
                        if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
                            b = false;
                            break;
                        }
                    }
                    if(b){
                        throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
                    }
                }
                if(b && ToolUtil.isNotEmpty(sp)){
                    seatNumber += (sp + ",");
                for(String sp : split1){
                    boolean b = true;
                    for(String spl : split){
                        if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){
                            b = false;
                            break;
                        }
                    }
                    if(b && ToolUtil.isNotEmpty(sp)){
                        seatNumber += (sp + ",");
                    }
                }
                lineShiftDriver.setLaveSeatNumber(ToolUtil.isNotEmpty(seatNumber) ? seatNumber.substring(0, seatNumber.length() - 1) : "");
            } else {
                // 用户未选座的情况,自动分配剩余座位的前peopleNumber个
                StringBuilder assignedSeats = new StringBuilder();
                StringBuilder remainingSeats = new StringBuilder();
                for(int i = 0; i < split1.length; i++){
                    if(ToolUtil.isEmpty(split1[i])){
                        continue;
                    }
                    if(i < orderCrossCity.getPeopleNumber()){
                        // 分配给当前订单的座位
                        if(assignedSeats.length() > 0){
                            assignedSeats.append(",");
                        }
                        assignedSeats.append(split1[i]);
                    } else {
                        // 剩余的座位
                        if(remainingSeats.length() > 0){
                            remainingSeats.append(",");
                        }
                        remainingSeats.append(split1[i]);
                    }
                }
                // 设置订单的座位号
                orderCrossCity.setSeatNumber(assignedSeats.toString());
                this.updateById(orderCrossCity);
                // 更新班次的剩余座位号
                lineShiftDriver.setLaveSeatNumber(remainingSeats.toString());
            }
            lineShiftDriver.setLaveSeatNumber(ToolUtil.isNotEmpty(seatNumber) ? seatNumber.substring(0, seatNumber.length() - 1) : "");
        }
        lineShiftDriverMapper.updateById(lineShiftDriver);
@@ -1607,11 +1643,11 @@
            return ResultUtil.error("该乘客有未完成的订单");
        }
        // 9. 检查司机是否正在服务中
        List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(driverId, warpper.getLineShiftDriverId(), Arrays.asList(5));
        if (orderCrossCities2.size() > 0) {
            return ResultUtil.error("司机正在服务中");
        }
//        // 9. 检查司机是否正在服务中
//        List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(driverId, warpper.getLineShiftDriverId(), Arrays.asList(5));
//        if (orderCrossCities2.size() > 0) {
//            return ResultUtil.error("司机正在服务中");
//        }
//        // 10. 计算价格
//        Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html
@@ -44,42 +44,17 @@
                            <input type="text" class="form-control" id="areaName" name="areaName">
                        </div>
                        <label class="col-sm-1 control-label">类型:</label>
                        <div class="col-sm-2"  style="display: flex;align-items: center;">
                            <div class="radio radio-info radio-inline">
                                <input type="radio" id="areaType1" value="1" name="areaType" checked="" onclick="TSiteInfoDlg.areaTypeClick(1)">
                                <label for="areaType1"> 行政区域 </label>
                            </div>
                            <div class="radio radio-success radio-inline">
                                <input type="radio" id="areaType2" value="2" name="areaType" onclick="TSiteInfoDlg.areaTypeClick(2)">
                                <label for="areaType2"> 电子围栏 </label>
                            </div>
                        <div class="col-sm-2" style="display: flex;align-items: center;">
                            <input type="hidden" id="areaType2" value="2" name="areaType">
                            <span class="form-control-static">电子围栏</span>
                        </div>
                        <div class="col-sm-2">
                            <#button btnCss="info" name="添加" id="ensure" icon="fa-check" clickFun="TSiteInfoDlg.addArea()"/>
                        </div>
                    </div>
                    <div class="form-group" id="areaType1Div">
                        <label class="col-sm-2 control-label">行政区域:</label>
                        <div class="col-sm-2">
                            <select class="form-control" id="provinceCode1" onchange="TSiteInfoDlg.provinceChange1(this)">
                                <option value="">选择省</option>
                                @for(obj in provinceList){
                                <option value="${obj.code}">${obj.name}</option>
                                @}
                            </select>
                        </div>
                        <div class="col-sm-2">
                            <select class="form-control" id="cityCode1" onchange="TSiteInfoDlg.cityChange1(this)">
                                <option value="">选择市</option>
                            </select>
                        </div>
                        <div class="col-sm-2">
                            <select class="form-control" id="districtCode1">
                                <option value="">选择区</option>
                            </select>
                        </div>
                    <div class="form-group" id="areaType1Div" style="display: none;">
                    </div>
                    <div class="form-group" id="areaType2Div" style="display: none;">
                    <div class="form-group" id="areaType2Div">
                        <label class="col-sm-2 control-label">电子围栏:</label>
                        <div class="col-sm-8">
                            <div id="container" style="height: 550px;width: 1000px;"></div>
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html
@@ -51,42 +51,17 @@
                            <input type="text" class="form-control" id="areaName" name="areaName">
                        </div>
                        <label class="col-sm-1 control-label">类型:</label>
                        <div class="col-sm-2"  style="display: flex;align-items: center;">
                            <div class="radio radio-info radio-inline">
                                <input type="radio" id="areaType1" value="1" name="areaType" ${checked1} disabled onclick="TSiteInfoDlg.areaTypeClick(1)">
                                <label for="areaType1"> 行政区域 </label>
                            </div>
                            <div class="radio radio-success radio-inline">
                                <input type="radio" id="areaType2" value="2" name="areaType" ${checked2} disabled onclick="TSiteInfoDlg.areaTypeClick(2)">
                                <label for="areaType2"> 电子围栏 </label>
                            </div>
                        <div class="col-sm-2" style="display: flex;align-items: center;">
                            <input type="hidden" id="areaType2" value="2" name="areaType">
                            <span class="form-control-static">电子围栏</span>
                        </div>
                        <div class="col-sm-2">
                            <#button btnCss="info" name="添加" id="ensure" icon="fa-check" clickFun="TSiteInfoDlg.addArea()"/>
                        </div>
                    </div>
                    <div class="form-group" id="areaType1Div" style="display: ${type1};">
                        <label class="col-sm-2 control-label">行政区域:</label>
                        <div class="col-sm-2">
                            <select class="form-control" id="provinceCode1" onchange="TSiteInfoDlg.provinceChange1(this)">
                                <option value="">选择省</option>
                                @for(obj in provinceList){
                                <option value="${obj.code}">${obj.name}</option>
                                @}
                            </select>
                        </div>
                        <div class="col-sm-2">
                            <select class="form-control" id="cityCode1" onchange="TSiteInfoDlg.cityChange1(this)">
                                <option value="">选择市</option>
                            </select>
                        </div>
                        <div class="col-sm-2">
                            <select class="form-control" id="districtCode1">
                                <option value="">选择区</option>
                            </select>
                        </div>
                    <div class="form-group" id="areaType1Div" style="display: none;">
                    </div>
                    <div class="form-group" id="areaType2Div" style="display: ${type2};">
                    <div class="form-group" id="areaType2Div">
                        <label class="col-sm-2 control-label">电子围栏:</label>
                        <div class="col-sm-8">
                            <div id="container" style="height: 550px;width: 1000px;"></div>
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js
@@ -273,13 +273,8 @@
 * @param e
 */
TSiteInfoDlg.areaTypeClick = function (e) {
    if (1 == e){//行政区域
        $("#areaType1Div").show();
        $("#areaType2Div").hide();
    } else if (2 == e){
        $("#areaType2Div").show();
        $("#areaType1Div").hide();
    }
    $("#areaType2Div").show();
    $("#areaType1Div").hide();
}
//站点区域省改变
@@ -323,7 +318,7 @@
        Feng.error("区域名称不能为空");
        return;
    }
    var areaType = $("input[name='areaType']:checked").val();
    var areaType = $("input[name='areaType']").val();
    var b = false;
    $(".areaValueClass").each(function () {
        var areaType1 = $(this).find("input[name*='areaType1']").val();
@@ -336,23 +331,15 @@
        Feng.error("电子围栏和行政区域不能混合使用");
        return;
    }
    if (1 == areaType){
        var provinceCode1 = $("#provinceCode1").val();
        var province1 = $("#provinceCode1 option:selected").text();
        var cityCode1 = $("#cityCode1").val();
        var city1 = $("#cityCode1 option:selected").text();
        var districtCode1 = $("#districtCode1").val();
        var district1 = $("#districtCode1 option:selected").text();
        if ("" == provinceCode1){
            Feng.error("请选择行政区域所属省");
            return;
        }
    }else if (2 == areaType) {
        if("" == coordinate){
            Feng.error('请在地图上规划区域');
            return;
        }
    var provinceCode1 = "";
    var province1 = "";
    var cityCode1 = "";
    var city1 = "";
    var districtCode1 = "";
    var district1 = "";
    if("" == coordinate){
        Feng.error('请在地图上规划区域');
        return;
    }
    var subArr=[];
    $(".areaValueClass").each(function () {
@@ -394,4 +381,8 @@
//删除数据
function deleteSub(e) {
    $(e).parent().parent().remove();
}
}
$(function() {
    TSiteInfoDlg.areaTypeClick(2);
});
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/LineSiteMapper.java
@@ -29,4 +29,11 @@
     */
    List<Map<String, Object>> queryDriverBySelfTripId(@Param("selfTripId") Integer selfTripId, @Param("day") Date day,
                                                       @Param("driverId") Integer driverId);
    /**
     * 根据司机id查询企业是否开启选座(1=是,2=否)
     * @param driverId 司机id
     * @return 开关值
     */
    Integer queryChooseSeatByDriverId(@Param("driverId") Integer driverId);
}
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/LineSiteMapper.xml
@@ -93,4 +93,12 @@
        </if>
        limit 1
    </select>
    <select id="queryChooseSeatByDriverId" resultType="java.lang.Integer">
        select ifnull(c.isCanSelectSeat, 2)
        from t_driver d
        left join t_company c on c.id = ifnull(d.companyId, d.franchiseeId)
        where d.id = #{driverId}
        limit 1
    </select>
</mapper>
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineSiteServiceImpl.java
@@ -71,8 +71,19 @@
        if(c.getTimeInMillis() > sdf.parse(day).getTime()){
            throw new SystemException("日期不能小于当天");
        }
        Boolean chooseSeat = false;
        if (driverId != null) {
            Integer chooseSeatValue = lineSiteMapper.queryChooseSeatByDriverId(driverId);
            chooseSeat = (chooseSeatValue != null && chooseSeatValue.intValue() == 1);
        }
        if (lineId != null && lineId < 0) {
            return lineSiteMapper.queryDriverBySelfTripId(Math.abs(lineId), sdf.parse(day), driverId);
            List<Map<String, Object>> result = lineSiteMapper.queryDriverBySelfTripId(Math.abs(lineId), sdf.parse(day), driverId);
            for (Map<String, Object> map : result) {
                map.put("chooseSeat", chooseSeat);
            }
            return result;
        }
        List<Map<String, Object>> list = new ArrayList<>();
        List<LineShift> lineShifts = lineShiftMapper.queryByLineId(lineId);
@@ -128,6 +139,12 @@
                    String content = map.get("content").toString();
                    JSONObject jsonObject = JSON.parseObject(content);
                    map.put("price", jsonObject.getString("num1"));
                    if (chooseSeat){
                        map.put("chooseSeat", chooseSeat);
                    }else if (driverId == null){
                        Integer chooseSeatValue = lineSiteMapper.queryChooseSeatByDriverId(Integer.parseInt(map.get("driverId").toString()));
                        map.put("chooseSeat", chooseSeatValue != null && chooseSeatValue.intValue() == 1);
                    }
                    data = map;
                    list.add(data);
                }
@@ -135,6 +152,7 @@
            if(b){
                data.put("id", lineShift.getId());
                data.put("startTime", lineShift.getStartTime() + "-" + lineShift.getEndTime());
                data.put("chooseSeat", chooseSeat);
                list.add(data);
            }
        }
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -32,6 +32,7 @@
import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
import com.stylefeng.guns.modular.taxi.service.impl.OrderTaxiServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -1398,36 +1399,69 @@
            lineShiftDriver.setLaveSeatNumber("");
        } else {//拼车
            lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()) < 0 ? 0 : lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber());
            String[] split = orderCrossCity.getSeatNumber().split(",");
            String[] split1 = lineShiftDriver.getLaveSeatNumber().split(",");
            String seatNumber = "";
            //先判断选中座位号和剩余座位号是否匹配
            for (String spl : split) {
                boolean b = true;
                for (String sp : split1) {
                    if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) {
                        b = false;
                        break;
                    }
                }
                if (b) {
                    throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
                }
            }
            for (String sp : split1) {
                boolean b = true;
            if (StringUtils.isNotEmpty(orderCrossCity.getSeatNumber())){
                String[] split = orderCrossCity.getSeatNumber().split(",");
                String seatNumber = "";
                //先判断选中座位号和剩余座位号是否匹配
                for (String spl : split) {
                    if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) {
                        b = false;
                        break;
                    boolean b = true;
                    for (String sp : split1) {
                        if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) {
                            b = false;
                            break;
                        }
                    }
                    if (b) {
                        throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!");
                    }
                }
                if (b && ToolUtil.isNotEmpty(sp)) {
                    seatNumber += (sp + ",");
                for (String sp : split1) {
                    boolean b = true;
                    for (String spl : split) {
                        if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) {
                            b = false;
                            break;
                        }
                    }
                    if (b && ToolUtil.isNotEmpty(sp)) {
                        seatNumber += (sp + ",");
                    }
                }
                lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ?
                        seatNumber.substring(0, seatNumber.length() - 1) : "");
            } else {
                // 用户未选座的情况,自动分配剩余座位的前peopleNumber个
                StringBuilder assignedSeats = new StringBuilder();
                StringBuilder remainingSeats = new StringBuilder();
                for (int i = 0; i < split1.length; i++) {
                    if (ToolUtil.isEmpty(split1[i])) {
                        continue;
                    }
                    if (i < orderCrossCity.getPeopleNumber()) {
                        // 分配给当前订单的座位
                        if (assignedSeats.length() > 0) {
                            assignedSeats.append(",");
                        }
                        assignedSeats.append(split1[i]);
                    } else {
                        // 剩余的座位
                        if (remainingSeats.length() > 0) {
                            remainingSeats.append(",");
                        }
                        remainingSeats.append(split1[i]);
                    }
                }
                // 设置订单的座位号
                orderCrossCity.setSeatNumber(assignedSeats.toString());
                this.updateById(orderCrossCity);
                // 更新班次的剩余座位号
                lineShiftDriver.setLaveSeatNumber(remainingSeats.toString());
            }
            lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ?
                    seatNumber.substring(0, seatNumber.length() - 1) : "");
        }
        lineShiftDriverMapper.updateById(lineShiftDriver);
        
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/warpper/LineSiteWarpper.java
@@ -43,6 +43,8 @@
    private String laveSeatNumber;
    @ApiModelProperty("剩余座位数")
    private Integer laveSeat;
    @ApiModelProperty("是否可以选座")
    private Boolean chooseSeat;
    public Integer getId() {
@@ -181,6 +183,14 @@
        this.laveSeat = laveSeat;
    }
    public Boolean getChooseSeat() {
        return chooseSeat;
    }
    public void setChooseSeat(Boolean chooseSeat) {
        this.chooseSeat = chooseSeat;
    }
    @Override
    public String toString() {
        return "LineSiteWarpper{" +
@@ -226,6 +236,7 @@
                    lineSiteWarpper.setServerCarModelId(null != map.get("serverCarModelId") ? Integer.valueOf(map.get("serverCarModelId").toString()) : 0);
                    lineSiteWarpper.setLaveSeatNumber(null != map.get("laveSeatNumber") ? map.get("laveSeatNumber").toString() : "");
                    lineSiteWarpper.setLaveSeat(null != map.get("laveSeat") ? Integer.valueOf(map.get("laveSeat").toString()) : 0);
                    lineSiteWarpper.setChooseSeat(null != map.get("chooseSeat") ? Boolean.valueOf(map.get("chooseSeat").toString()) : false);
                    data.add(lineSiteWarpper);
                }
            }