longz
2026-05-11 496ef92b09b1be5dc1beb4ecf031cfc20edbeb94
fix bugs
19个文件已修改
325 ■■■■■ 已修改文件
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOpenCity/tSysReformist.html 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemNoticeService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemNoticeServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/ITransactionDetailsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/TransactionDetailsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/LineShiftDriverServiceImpl.java
@@ -619,7 +619,7 @@
        if (lineShiftDriver == null) {
            return ResultUtil.error("班次信息不存在");
        }
        if (lineShiftDriver.getLineShiftId() != null && lineShiftDriver.getLineShiftId() == -1) {
        if (lineShiftDriver.getLineShiftId() != null && lineShiftDriver.getLineShiftId() <= -1) {
            return buildSelfTripDetail(lineShiftDriver);
        }
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -254,11 +254,11 @@
                serverMoney += income.getMoney();
            }
        }
        if (orderCrossCity.getLineId() == -1) {
        if (orderCrossCity.getLineId() <= -1) {
            LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
            DriverSelfTrip driverSelfTrip = driverSelfTripMapper.selectById(lineShiftDriver.getCustomerId());
            map.put("line", driverSelfTrip.getStartCityName() + "-" + driverSelfTrip.getEndCityName());
            map.put("lineId", -1);
            map.put("lineId", orderCrossCity.getLineId());
        } else {
            Line line = lineService.selectById(orderCrossCity.getLineId());
            map.put("line", line.getName());
@@ -1227,7 +1227,7 @@
            map.put("price", -1);
            return ResultUtil.success(map);
        }
        if (lineId != null && lineId == -1) {
        if (lineId != null && lineId <= -1) {
            BigDecimal price = querySelfTripNearestPrice(lineShiftDriver, endLon, endLat);
            map.put("price", price == null ? -1 : multiplyPeopleNumber(price, peopleNumber).doubleValue());
            return ResultUtil.success(map);
@@ -1257,7 +1257,7 @@
            map.put("price", unitPrice == null ? -1 : multiplyPeopleNumber(unitPrice, peopleNumber).doubleValue());
            return ResultUtil.success(map);
        }
        if (lineId != null && lineId == -1) {
        if (lineId != null && lineId <= -1) {
            if (lineShiftDriverId == null) {
                map.put("price", -1);
                return ResultUtil.success(map);
@@ -1553,7 +1553,7 @@
        // 6. 获取线路班次信息
        LineSite lineSite;
        if (lineShiftDriver.getLineShiftId() == -1) {
        if (lineShiftDriver.getLineShiftId() <= -1) {
            lineSite = new LineSite();
            lineSite.setLineId(-1);
            if (lineShiftDriver.getCustomerId() != null) {
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -25,6 +25,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@@ -516,10 +517,15 @@
                return ResultUtil.error("当前订单不能操作");
            }
        }
        Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
        switch (state){
            case 3://出发前往预约点
                orderPrivateCar.setState(3);
                orderPrivateCar.setSetOutTime(new Date());
                if (driver.getState() != 3) {
                    driver.setState(3);
                    driverService.updateById(driver);
                }
                systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderPrivateCar.getUserId(), 1);
                break;
            case 4://到达预约点,等待客户上车
@@ -544,6 +550,10 @@
                orderPrivateCar.setGetoffAddress(address);
                orderPrivateCar.setGetoffTime(new Date());
                orderPrivateCar.setEndServiceTime(new Date());
                if (driver.getState() != 2) {
                    driver.setState(2);
                    driverService.updateById(driver);
                }
                break;
        }
        orderPrivateCar.setCancelType(2);
@@ -1016,12 +1026,12 @@
        Map<String, Object> map = new HashMap<>();
        if(orderPrivateCar.getState() == 5){
            map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:orderPrivateCar.getOrderMoney());//订单金额
            map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?BigDecimal.ZERO:new BigDecimal(orderPrivateCar.getOrderMoney().toString()).setScale(2,RoundingMode.HALF_UP));//订单金额
        }else{
            if(orderPrivateCar.getAbnormal() == 2 && orderPrivateCar.getResponsibilityType() > 2 && orderPrivateCar.getAbnormalStatus() == 2){
                map.put("orderMoney", orderPrivateCar.getResponsibilityMoney());
            }else{
                map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:orderPrivateCar.getOrderMoney());//订单金额
                map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?BigDecimal.ZERO:new BigDecimal(orderPrivateCar.getOrderMoney().toString()).setScale(2,RoundingMode.HALF_UP));//订单金额
            }
        }
        map.put("startMileage", orderPrivateCar.getStartMileage());//起步价
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
@@ -273,6 +273,11 @@
    @TableField("Taxi")
    private String Taxi;
    /**
     * 跨城出行自主单抽成配置
     */
    @TableField("cross")
    private String cross;
    /**
     * 同城小件抽成配置
     */
    @TableField("SameLogistics")
@@ -757,7 +762,15 @@
    public void setEnterCode(String enterCode) {
        this.enterCode = enterCode;
    }
    public String getCross() {
        return cross;
    }
    public void setCross(String cross) {
        this.cross = cross;
    }
    @Override
    public String toString() {
        return "Company{" +
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
@@ -212,12 +212,12 @@
                break;
            case 3:
                OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
                if (orderCrossCity.getLineId() == -1){
                driverId = orderCrossCity.getDriverId();
                if (orderCrossCity.getLineId() <= -1){
                    company = companyService.selectById(orderCrossCity.getCompanyId());
                    jsonObject = JSON.parseObject(company.getTaxi());
                    jsonObject = JSON.parseObject(company.getCross());
                }else {
                    Line line = lineService.selectById(orderCrossCity.getLineId());
                    driverId = orderCrossCity.getDriverId();
                    jsonObject = JSON.parseObject(line.getOutSetting());
                }
                rules = jsonObject.getJSONArray("rules");
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
@@ -186,7 +186,8 @@
    }
    public String getUnlimitQrcode(String appletPath, String scene){
        InputStream inputStream = getwxacodeunlimit(appletPath, scene, activeProfile.equals("prod") ? "release" : "trial");
//        InputStream inputStream = getwxacodeunlimit(appletPath, scene, activeProfile.equals("prod") ? "release" : "trial");
        InputStream inputStream = getwxacodeunlimit(appletPath, scene, "trial");
        if (inputStream != null) {
            File file = FileUtil.writeFromStream(inputStream, new File(filePath + "/" + UUID.randomUUID().toString() + ".png"));
            HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image");
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/MoneyInfoWarpper.java
@@ -11,7 +11,7 @@
@ApiModel("费用明细")
public class MoneyInfoWarpper {
    @ApiModelProperty("订单总金额")
    private Double orderMoney;
    private String orderMoney;
    @ApiModelProperty("起步里程")
    private Double startMileage;
    @ApiModelProperty("起步价")
@@ -45,11 +45,11 @@
    @ApiModelProperty("折扣")
    private Double discount;
    public Double getOrderMoney() {
    public String getOrderMoney() {
        return orderMoney;
    }
    public void setOrderMoney(Double orderMoney) {
    public void setOrderMoney(String orderMoney) {
        this.orderMoney = orderMoney;
    }
@@ -206,7 +206,7 @@
    public static MoneyInfoWarpper getMoneyInfoWarpper(Map<String, Object> map){
        MoneyInfoWarpper moneyInfoWarpper = new MoneyInfoWarpper();
        if(null != map){
            moneyInfoWarpper.setOrderMoney(null != map.get("orderMoney") ? Double.valueOf(map.get("orderMoney").toString()) : 0D);
            moneyInfoWarpper.setOrderMoney(null != map.get("orderMoney") ? map.get("orderMoney").toString() : "0");
            moneyInfoWarpper.setStartMileage(null != map.get("startMileage") ? Double.valueOf(map.get("startMileage").toString()) : 0D);
            moneyInfoWarpper.setStartMoney(null != map.get("startMoney") ? Double.valueOf(map.get("startMoney").toString()) : 0D);
            moneyInfoWarpper.setMileage(null != map.get("mileageKilometers") ? Double.valueOf(map.get("mileageKilometers").toString()) : 0D);
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/OrderListWarpper.java
@@ -259,7 +259,17 @@
                orderListWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
                orderListWarpper.setRideType(null != map.get("rideType") ? Integer.valueOf(String.valueOf(map.get("rideType"))) : 1);
                orderListWarpper.setSpellSuccess(null != map.get("spellSuccess") ? Integer.valueOf(String.valueOf(map.get("spellSuccess"))) : 0);
                orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
                if (map.get("reservation") != null) {
                    if (Integer.parseInt(map.get("reservation").toString()) == 1) {
                        orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")).replace("订单", "") + "即时订单" : "");
                    } else if (Integer.parseInt(map.get("reservation").toString()) == 2) {
                        orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")).replace("订单", "") + "预约订单" : "");
                    } else {
                        orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
                    }
                } else {
                    orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
                }
                orderListWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
                orderListWarpper.setStartAddress(null != map.get("startAddress") ? String.valueOf(map.get("startAddress")) : "");
                orderListWarpper.setEndAddress(null != map.get("endAddress") ? String.valueOf(map.get("endAddress")) : "");
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -478,10 +478,15 @@
        if(10 == orderTaxi.getState()){
            return ResultUtil.error("订单已被取消,不能继续操作");
        }
        Driver driver = driverService.selectById(orderTaxi.getDriverId());
        switch (state){
            case 3://出发前往预约点
                orderTaxi.setState(3);
                orderTaxi.setSetOutTime(new Date());
                if (driver.getState() != 3) {
                    driver.setState(3);
                    driverService.updateById(driver);
                }
                systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderTaxi.getUserId(), 1);
                break;
            case 4://到达预约点,等待客户上车
@@ -506,7 +511,10 @@
                orderTaxi.setGetoffTime(new Date());
                orderTaxi.setState(6);
                orderTaxi.setEndServiceTime(new Date());
                if (driver.getState() != 2) {
                    driver.setState(2);
                    driverService.updateById(driver);
                }
                pushUtil.removeTask(orderId, 2);//删除定时任务,结束推送数据
                systemNoticeService.addSystemNotice(1, "司机已结束本次行程,谢谢使用", orderTaxi.getUserId(), 1);
                break;
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tOpenCity/tSysReformist.html
@@ -60,7 +60,7 @@
                        </div>
                        <div style="float: left;width: 1200px;margin-left: 50px;">
                            <div class="pushOrderSettings">
                                <div class="form-group pushCarSettings">
                                <div class="form-group">
                                    <label class="col-sm-2 control-label">推单设置:</label>
                                    <div class="col-sm-10">
                                        <div class="radio radio-danger">
@@ -154,7 +154,7 @@
                                        <br/>
                                    </div>
                                </div>
                                <div class="form-group">
                                <div class="form-group pushCarSettings">
                                    <label class="col-sm-2 control-label">出租车推单:</label>
                                    <div class="col-sm-10">
                                        第一轮推单:推单距离为&nbsp;<input type="text" oninput="checkIsDouble(this)"
@@ -813,6 +813,12 @@
        var czc7 = null == $("#czc7").val() ? "0" : $("#czc7").val().trim();
        var czc8 = null == $("#czc8").val() ? "0" : $("#czc8").val().trim();
        var czc9 = null == $("#czc9").val() ? "0" : $("#czc9").val().trim();
        var ajax = new $ax(Feng.ctxPath + "/tSysReformist/setUp", function(data){
            Feng.success("操作成功!");
            location.reload();
        },function(data){
            Feng.error("操作失败!" + data.responseJSON.message + "!");
        });
        if(type == 'pushOrderSettings'){
            if (pushType == 2) {
                ajax.set("pushType", pushType);
@@ -955,14 +961,6 @@
        if (dck2){dck2 = 1;} else {dck2 = 2;}
        var driverDays=$("#driverDay").val()
        //提交信息
        var ajax = new $ax(Feng.ctxPath + "/tSysReformist/setUp", function(data){
            Feng.success("操作成功!");
            location.reload();
        },function(data){
            Feng.error("操作失败!" + data.responseJSON.message + "!");
        });
        if(type == 'integralSet'){
            ajax.set("two", two);
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -250,7 +250,7 @@
        }
        Integer lineShifDriverId = null;
        if (lineId < 0 && lineDestinationId < 0) {
        if (lineId < 0 && (lineDestinationId == null || lineDestinationId < 0)) {
            lineShifDriverId = lineShiftDriverMapper.selectLineShiftDriverIdByCustomerId(-lineId);
        }
        ResultUtil<Map<String, Object>> result = this.getPriceV2(lineId, lineDestinationId, totalSeat, peopleNumber, endLon, endLat, lineShifDriverId);
@@ -831,7 +831,7 @@
            }
            String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
            resultUtil = ResultUtil.success(response);
            paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, paymentCode, 1);//添加预支付数据
            paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, outTradeNo, 1);//添加预支付数据
        }
        if (payType == 2) {//支付宝支付
            resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
@@ -1079,7 +1079,7 @@
            String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
            resultUtil = ResultUtil.success(response);
            this.updateById(orderCrossCity);
            paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, paymentCode, 1);//添加预支付数据
            paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, outTradeNo, 1);//添加预支付数据
        }
        if (payType == 2) {//支付宝支付
            if (orderMoney == 0) {
@@ -1214,7 +1214,7 @@
            
            
            query.setState(2);
            query.setCode(order_id);
//            query.setCode(order_id);
            paymentRecordService.updateById(query);
            
            // TODO: 2020/5/24 这里需要给司机和用户推送订单状态
@@ -1319,7 +1319,8 @@
        orderCrossCity.setMileage(0D);
        Integer lineShifDriverId = orderCrossCityWarpper.getLineShiftDriverId();
        if (orderCrossCityWarpper.getLineId() < 0 && orderCrossCityWarpper.getLineDestinationId() < 0) {
        Integer lineDestinationId = orderCrossCityWarpper.getLineDestinationId();
        if (orderCrossCityWarpper.getLineId() < 0 && (lineDestinationId == null || lineDestinationId < 0)) {
            lineShifDriverId = lineShiftDriverMapper.selectLineShiftDriverIdByCustomerId(-orderCrossCityWarpper.getLineId());
        }
        ResultUtil<Map<String, Object>> price = this.getPriceV2(orderCrossCityWarpper.getLineId(), orderCrossCityWarpper.getLineDestinationId(),
@@ -1332,6 +1333,7 @@
        if (money < 0) {
            return ResultUtil.error("计算价格失败");
        }
        orderCrossCity.setLineShiftDriverId(lineShifDriverId);
        orderCrossCity.setOrderMoney(money);
        Integer companyId = driver.getCompanyId();
        orderCrossCity.setCompanyId(companyId);
@@ -1623,7 +1625,8 @@
                }
                String recordCode = cbyzxOrderPayHelper.extractRecordCode(response);
                String paymentCode = ToolUtil.isNotEmpty(recordCode) ? recordCode : outTradeNo;
                paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), paymentCode, 1);//添加预支付数据
                paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), outTradeNo, 1);//添加预支付数据
                resultUtil = ResultUtil.success(response);
//                Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",3", 9, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/wxCancelOrderTaxi", "", type, appletsOpenId);
//                if(map.get("code").equals("200")){
@@ -1957,7 +1960,7 @@
            this.updateById(orderCrossCity);
            
            query.setState(2);
            query.setCode(order_id);
//            query.setCode(order_id);
            paymentRecordService.updateById(query);
            
            OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1);
@@ -2149,9 +2152,16 @@
                }
                
                if (query.getPayType() == 1) {//微信
                    Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), id + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
                    if (!"SUCCESS".equals(map.get("return_code"))) {
                        return ResultUtil.error(map.get("return_msg"));
                    CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
                    request.setOutRequestNo(query.getCode());
                    request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderCrossCity.getId()));
                    request.setRefundAmount(toFen(query.getAmount()));
                    request.setRefundDesc("跨城出行取消退款");
                    JSONObject response = CbyzxPayUtil.closePayOrder(request);
                    System.out.println("跨城出行取消退款退款结果:" + response.toJSONString());
                    if (!isTaxiPrepayRefundSuccess(response)) {
                        return ResultUtil.error(extractCrossCityRefundMessage(response), response);
                    }
                    transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id);
                } else if (query.getPayType() == 4) { // 云闪付
@@ -2183,8 +2193,38 @@
        map.put("id", integer);
        return ResultUtil.success(map);
    }
    private Integer toFen(Double amount) {
        return new BigDecimal(String.valueOf(amount)).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValue();
    }
    private String buildPrepayRefundOutNo(Integer orderId) {
        return "CROSS_REFUND_1_" + orderId + ToolUtil.getRandomString(5);
    }
    private boolean isTaxiPrepayRefundSuccess(JSONObject response) {
        if (response == null) {
            return false;
        }
        Object code = response.get("code");
        if (code == null || !"0".equals(String.valueOf(code))) {
            return false;
        }
        JSONObject data = response.getJSONObject("data");
        return data != null && Boolean.TRUE.equals(data.getBoolean("isSuccess"));
    }
    private String extractCrossCityRefundMessage(JSONObject response) {
        if (response == null) {
            return "微信跨城订单退款失败";
        }
        JSONObject data = response.getJSONObject("data");
        if (data != null && ToolUtil.isNotEmpty(data.getString("failReason"))) {
            return data.getString("failReason");
        }
        String msg = response.getString("msg");
        return ToolUtil.isNotEmpty(msg) ? msg : "微信跨城订单退款失败";
    }
    /**
     * 获取服务中的订单数据
     *
@@ -2709,7 +2749,7 @@
            }
            String recordCode = cbyzxOrderPayHelper.extractRecordCode(response);
            String paymentCode = ToolUtil.isNotEmpty(recordCode) ? recordCode : outTradeNo;
            paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, paymentCode, 1);//添加预支付数据
            paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, outTradeNo, 1);//添加预支付数据
        }
        if (payType == 2) {//支付宝支付
            resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee");
@@ -2761,7 +2801,7 @@
        UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId());
        PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 3, payType, 1);
        query.setState(2);
        query.setCode(order_id);
//        query.setCode(order_id);
        paymentRecordService.updateById(query);
        
        OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
@@ -405,6 +405,7 @@
        left join t_order_evaluate g on (a.id = g.orderId and g.orderType = 1)
        left join t_order_cancel h on (a.id = h.orderId and h.orderType = 1 and h.state = 2)
        where a.id = #{orderId}
        LIMIT 1
    </select>
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -1149,10 +1149,11 @@
//                return ResultUtil.success(map);
            }
        }else if(!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode()) && StrUtil.isEmpty(orderPrivateCar.getPrepaySecondPayNo())){
            UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
            userInfo.setBalance(userInfo.getBalance() + orderPrivateCar.getPayMoney());
            userInfoService.updateById(userInfo);
            if (orderPrivateCar.getPayMoney() != null){
                UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
                userInfo.setBalance(userInfo.getBalance() + orderPrivateCar.getPayMoney());
                userInfoService.updateById(userInfo);
            }
        }
        Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6));
        Integer number2 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6));
@@ -2895,8 +2896,50 @@
    }
    private ResultUtil handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason, String remark, Integer uid) throws Exception {
        System.out.println("快车退款!!!!");
        if (!isPrivateCarPrepayMode(orderPrivateCar)) {
            return null;
        }
        if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
            Double refundAmount = orderPrivateCar.getPayMoney();
            System.out.println("快车余额退款金额!!!!"+ refundAmount);
            if (refundAmount == null || refundAmount <= 0) {
                return ResultUtil.error("余额先付订单退款金额异常");
            }
            UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
            if (userInfo == null) {
                return ResultUtil.error("用户信息不存在,无法退款");
            }
            userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0)
                    .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            userInfoService.updateById(userInfo);
            restorePrivateCarBenefits(orderPrivateCar);
            transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
            orderCancelService.saveData(orderPrivateCar.getId(), 1,
                    ToolUtil.isNotEmpty(reason) ? reason : "无司机接单",
                    ToolUtil.isNotEmpty(remark) ? remark : (ToolUtil.isNotEmpty(reason) ? reason : "无司机接单"),
                    1, refundAmount, 2, 1, uid);
            orderPrivateCar.setState(10);
            orderPrivateCar.setPrepayStage(5);
            orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5));
            orderPrivateCar.setPrepayRefundAmount(refundAmount);
            orderPrivateCar.setPrepayRefundTime(new Date());
            this.updateById(orderPrivateCar);
            if (orderPrivateCar.getDriverId() != null) {
                this.deleteTask(orderPrivateCar.getId());
                pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
                Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                if (driver != null) {
                    driver.setState(2);
                    driverService.updateById(driver);
                }
                if (orderPrivateCar.getBindId() != null) {
                    chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000));
                }
            }
            System.out.println("余额退款通知940");
            systemNoticeService.addSystemNotice(1, "您的快车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderPrivateCar.getUserId(), 1);
            return ResultUtil.success();
        }
        String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
        if (ToolUtil.isEmpty(outRequestNo)) {
@@ -3500,12 +3543,13 @@
                            }else {
                                // 没找到车辆
                                Thread.sleep(5000);
                                ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId());
                                if (refundResult == null) {
                                    orderPrivateCar.setState(10);
                                    orderPrivateCarMapper.updateById(orderPrivateCar);
                                }
                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 10);
                            }
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemNoticeService.java
@@ -16,7 +16,7 @@
     * @param userId
     * @throws Exception
     */
    void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) throws Exception;
    void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType);
    /**
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemNoticeServiceImpl.java
@@ -31,7 +31,7 @@
     * @throws Exception
     */
    @Override
    public void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) throws Exception {
    public void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) {
        SystemNotice systemNotice = new SystemNotice();
        systemNotice.setContent(content);
        systemNotice.setInsertTime(new Date());
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -88,7 +88,7 @@
        post.form(params);
        HttpResponse execute = post.execute();
        if (200 != execute.getStatus()) {
            System.err.println("推送异常");
            System.err.println("推送异常"+execute.body());
        } else {
            JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class);
            if (jsonObject1.getIntValue("code") != 200) {
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/ITransactionDetailsService.java
@@ -19,5 +19,5 @@
     * @throws Exception
     */
    void saveData(Integer userId, String remark, Double money, Integer state,
                  Integer type, Integer userType, Integer orderType, Integer orderId) throws Exception;
                  Integer type, Integer userType, Integer orderType, Integer orderId);
}
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -29,6 +29,7 @@
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -52,6 +53,7 @@
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class OrderTaxiServiceImpl extends ServiceImpl<OrderTaxiMapper, OrderTaxi> implements IOrderTaxiService {
@@ -558,20 +560,7 @@
        System.out.println("出租车退款111!!!!");
        if (!Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) && StrUtil.isNotEmpty(orderTaxi.getPrepaySecondPayNo())) {
            System.out.println("出租车退款2222!!!!");
            ResultUtil refundResult = handleTaxiPrepayCancelRefund(orderTaxi, reason, remark, uid);
            if (refundResult != null) {
                System.out.println("出租车退款3333!!!!"+refundResult.getCode());
                if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) {
                    return refundResult;
                }
                Map<String, Object> map = new HashMap<>();
                map.put("id", null);
                return ResultUtil.success(map);
            }
        }else if(!Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) && StrUtil.isEmpty(orderTaxi.getPrepaySecondPayNo())){
            UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId());
            userInfo.setBalance(userInfo.getBalance() + orderTaxi.getPayMoney());
            userInfoService.updateById(userInfo);
            handleTaxiPrepayCancelRefund(orderTaxi, reason);
        }
        if (null == orderTaxi.getDriverId()) {//没有接单的情况
            if (orderTaxi.getType() == 2) {//摆渡车
@@ -2308,7 +2297,7 @@
        }
    }
    private void restoreTaxiBenefits(OrderTaxi orderTaxi) throws Exception {
    private void restoreTaxiBenefits(OrderTaxi orderTaxi){
        if (null != orderTaxi.getCouponId()) {
            UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderTaxi.getCouponId());
            if (userCouponRecord != null) {
@@ -2388,6 +2377,53 @@
        return "PREPAY_REFUND_2_" + orderId+ ToolUtil.getRandomString(5);
    }
    private void handleTaxiPrepayCancelRefund(OrderTaxi orderTaxi, String reason){
        if (Integer.valueOf(3).equals(orderTaxi.getPayType())) {
            Double refundAmount = orderTaxi.getPayMoney();
            if (refundAmount == null || refundAmount <= 0) {
                throw new RuntimeException("余额先付订单退款金额异常");
            }
            UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId());
            if (userInfo == null) {
                throw new RuntimeException("用户信息不存在,无法退款");
            }
            userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0)
                    .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
            userInfoService.updateById(userInfo);
            restoreTaxiBenefits(orderTaxi);
            transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车取消订单退款", refundAmount, 1, 1, 1, 2, orderTaxi.getId());
            orderTaxi.setState(10);
            orderTaxi.setPrepayStage(5);
            orderTaxi.setPrepayRefundNo("BALANCE_REFUND_2_" + orderTaxi.getId() + "_" + ToolUtil.getRandomString(5));
            orderTaxi.setPrepayRefundAmount(refundAmount);
            orderTaxi.setPrepayRefundTime(new Date());
            this.updateById(orderTaxi);
            systemNoticeService.addSystemNotice(1, "您的出租车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderTaxi.getUserId(), 1);
        }else {
            String outRequestNo = orderTaxi.getPrepaySecondPayNo();
            if (ToolUtil.isEmpty(outRequestNo)) {
                throw new RuntimeException("微信先付订单缺少支付单号,无法关闭支付单");
            }
            Double refundAmount = orderTaxi.getPayMoney();
            if (refundAmount == null || refundAmount <= 0) {
                throw new RuntimeException("微信先付订单退款金额异常");
            }
            CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
            request.setOutRequestNo(outRequestNo);
            request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderTaxi.getId()));
            request.setRefundAmount(toFen(refundAmount));
            request.setRefundDesc(ToolUtil.isNotEmpty(reason) ? reason : "出租车订单取消退款");
            JSONObject response = CbyzxPayUtil.closePayOrder(request);
            System.out.println("微信先付订单退款结果:" + response.toJSONString());
            if (!isTaxiPrepayRefundSuccess(response)) {
                throw new RuntimeException(extractTaxiRefundMessage(response));
            }
            restoreTaxiBenefits(orderTaxi);
            transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车取消订单退款", refundAmount, 1, 1, 1, 2, orderTaxi.getId());
            systemNoticeService.addSystemNotice(1, "您的出租车微信先付订单已取消,退款已原路退回,请注意查收。", orderTaxi.getUserId(), 1);
        }
    }
    private ResultUtil handleTaxiPrepayCancelRefund(OrderTaxi orderTaxi, String reason, String remark, Integer uid) throws Exception {
        System.out.println("出租车退款!!!!");
        if (orderTaxi == null || !Integer.valueOf(1).equals(orderTaxi.getPaymentMode())) {
@@ -2395,6 +2431,7 @@
        }
        if (Integer.valueOf(3).equals(orderTaxi.getPayType())) {
            Double refundAmount = orderTaxi.getPayMoney();
            System.out.println("余额退款金额!!!!"+ refundAmount);
            if (refundAmount == null || refundAmount <= 0) {
                return ResultUtil.error("余额先付订单退款金额异常");
            }
@@ -2429,9 +2466,11 @@
                    chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(), orderTaxi.getTelX(), (System.currentTimeMillis() + 600000));
                }
            }
            System.out.println("余额退款通知469");
            systemNoticeService.addSystemNotice(1, "您的出租车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderTaxi.getUserId(), 1);
            return ResultUtil.success();
        }
        System.out.println("微信退款473");
        String outRequestNo = orderTaxi.getPrepaySecondPayNo();
        if (ToolUtil.isEmpty(outRequestNo)) {
            return ResultUtil.error("微信先付订单缺少支付单号,无法关闭支付单");
@@ -2480,6 +2519,7 @@
    }
    private void handleTaxiPrepayFirstPaid(OrderTaxi orderTaxi, UserInfo userInfo, Double payAmount, Integer payType) throws Exception {
        log.error("出租车预付回调-------519");
        OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
        SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
        if (null != query1) {
@@ -2533,12 +2573,13 @@
        if (query == null) {
            query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1);
        }
        System.out.println("出租车预付回调-------572");
        if (null != query && query.getState() == 1) {
            UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId());
            query.setState(2);
            query.setCode(order_id);
            paymentRecordService.updateById(query);
            System.out.println("出租车预付回调-------579,"+orderTaxi);
            if (isTaxiPrepayFirstStage(orderTaxi)) {
                orderTaxi.setPrepaySecondPayNo(outTradeNo);
                handleTaxiPrepayFirstPaid(orderTaxi, userInfo, query.getAmount(), type);
@@ -2567,7 +2608,7 @@
            if (!isPrepaySpreadStage) {
                consumeTaxiBenefits(orderTaxi);
            }
            System.out.println("出租车预付回调-------608");
            //非追缴单才添加收入记录
            if(0 == orderTaxi.getRecoveryOrder() && (Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) || Integer.valueOf(5).equals(orderTaxi.getPrepayStage()))){
                //添加收入
@@ -2607,8 +2648,8 @@
                }
                redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString());
            }
            System.out.println("出租车预付回调-------649");
            systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功完成出行订单支付,谢谢使用!", orderTaxi.getUserId(), 1);
        } else {
            System.err.println("预支付数据异常(orderId = " + id + ")");
@@ -2691,14 +2732,18 @@
                    }
                    
                    OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
                    System.out.println("城市city732,"+openCity);
                    // 判断是否为智能派单
                    TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
                    System.out.println("推送方式735,"+sysPushType);
                    if(sysPushType!=null && sysPushType.getPushType()==2){
                        System.out.println("指派模式732");
                        OrderTaxi orderTaxi1 = orderTaxiMapper.selectById(orderTaxi.getId());
                        if (null == orderTaxi1 && orderTaxi1.getState() == 1) {
                        System.out.println("orderTaxi1,"+orderTaxi1);
                        if (null != orderTaxi1 && orderTaxi1.getState() == 1) {
                            // 获取5公里内司机抢单
                            List<Driver> listDriver = driverService.queryIdleDriver(2, orderTaxi1.getStartLon(), orderTaxi1.getStartLat(), 5.0, null);//查询5公里内空闲司机
                            System.out.println("指派模式743"+listDriver);
                            if (listDriver.size() > 0) {
                                Driver driver1 = listDriver.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
@@ -2785,21 +2830,22 @@
                            }else {
                                // 没找到车辆
                                Thread.sleep(5000);
                                OrderTaxi orderTaxi2 = orderTaxiMapper.selectById(orderTaxi.getId());
                                System.out.println("指派模式830");
                                ResultUtil refundResult = handleTaxiPrepayCancelRefund(orderTaxi2, "\u65e0\u53f8\u673a\u63a5\u5355", "\u65e0\u53f8\u673a\u63a5\u5355", orderTaxi2.getUserId());
                                if (refundResult == null) {
                                    orderTaxi2.setState(10);
                                    orderTaxiMapper.updateById(orderTaxi2);
                                }
                                pushUtil.pushEndPush(1, orderTaxi2.getUserId(), orderTaxi2.getId(), 2, 1);
                                pushUtil.pushEndPush(1, orderTaxi2.getUserId(), orderTaxi2.getId(), 2, 10);
                            }
                        }
                    }else {
                        System.out.println("推单模式836");
                        List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//查询推单配置
                        //整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后仍无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车
                        int num = 0;
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/TransactionDetailsServiceImpl.java
@@ -31,7 +31,7 @@
     */
    @Override
    public void saveData(Integer userId, String remark, Double money, Integer state, Integer type, Integer userType,
                         Integer orderType, Integer orderId) throws Exception {
                         Integer orderType, Integer orderId) {
        TransactionDetails transactionDetails = new TransactionDetails();
        transactionDetails.setInsertTime(new Date());