xuhy
2025-08-01 8e680f301f31c91391579213661be4af04810e8c
UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -207,7 +207,7 @@
     */
    @Override
    public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat,
                                          String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid) throws Exception {
                                          String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid,BigDecimal estimatedPrice) throws Exception {
        //如果出行时间大于当前10分钟则默认为预约单
        if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){
@@ -285,6 +285,7 @@
        orderPrivateCar.setTravelTime(travelTime);
        orderPrivateCar.setOrderType(reservation);
        orderPrivateCar.setOrderSource(orderSource);
        orderPrivateCar.setEstimatedPrice(estimatedPrice);
        if(orderSource == 2){//扫码下单
            Driver driver = driverService.selectById(driverId);
            if(null == driver){
@@ -397,7 +398,7 @@
                                    }
                                    // 判断该司机是否有30分钟内预约单
                                    long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) &&
                                            DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(30).isBefore(LocalDateTime.now())).count();
                                            DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count();
                                    if (count > 0) {
                                        continue;
                                    }
@@ -672,136 +673,150 @@
     */
    @Override
    public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception {
        OrderPrivateCar orderPrivateCar = this.selectById(id);
        Integer uid = orderPrivateCar.getUserId();
        UserInfo userInfo = userInfoService.selectById(uid);
        ResultUtil resultUtil = ResultUtil.success("");
        if(null == orderPrivateCar){
            return ResultUtil.error("取消订单失败,订单信息有误", "");
        }
        if(orderPrivateCar.getState() != 12){
            return ResultUtil.error("取消订单失败,不合法的操作", "");
        }
        OrderCancel orderCancel = null;
        if(null == cancleId || cancleId==0){
            orderCancel = orderCancelService.query(id, 1, null, null, 1);
        }else{
            orderCancel = orderCancelService.selectById(cancleId);
        }
        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
        if(null != query){
            String code = id + "_1_" + UUIDUtil.getRandomCode(3);
            if(payType == 1){//微信支付
                if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
                    return ResultUtil.error("未授权微信,无法完成支付");
        boolean lock = redisUtil.lock(id + "_cancleOrder", 10);
        if(!lock){
            int num1 = 1;
            while (num1 <= 10){
                Thread.sleep(3000);//等待3秒
                lock = redisUtil.lock(id + "_cancleOrder", 10);
                if(lock){
                    break;
                }else{
                    num1++;
                }
                orderCancel.setPayType(1);
                orderCancelService.updateById(orderCancel);
                resultUtil =  payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据
                    new Thread(()->{
                        int num = 1;
                        int min = 5000;
                        int w = 0;
                        while (num <= 10) {
                            try {
                                w += min * num;
                                OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(id);
                                if (orderPrivateCar1.getState() == 10) {
                                    break;
                                }
                                ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI");
                                if (resultUtil1.getCode() == 200) {
                                    /**
                                     * SUCCESS--支付成功
                                     * REFUND--转入退款
                                     * NOTPAY--未支付
                                     * CLOSED--已关闭
                                     * REVOKED--已撤销(刷卡支付)
                                     * USERPAYING--用户支付中
                                     * PAYERROR--支付失败(其他原因,如银行返回失败)
                                     * ACCEPT--已接收,等待扣款
                                     */
                                    String s = resultUtil1.getData().get("trade_state").toString();
                                    if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
            }
        }
        ResultUtil resultUtil = ResultUtil.success("");
        try {
            OrderPrivateCar orderPrivateCar = this.selectById(id);
            Integer uid = orderPrivateCar.getUserId();
            UserInfo userInfo = userInfoService.selectById(uid);
            if(null == orderPrivateCar){
                return ResultUtil.error("取消订单失败,订单信息有误", "");
            }
            if(orderPrivateCar.getState() != 12){
                return ResultUtil.error("取消订单失败,不合法的操作", "");
            }
            OrderCancel orderCancel = null;
            if(null == cancleId || cancleId==0){
                orderCancel = orderCancelService.query(id, 1, null, null, 1);
            }else{
                orderCancel = orderCancelService.selectById(cancleId);
            }
            CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
            if(null != query){
                String code = id + "_1_" + UUIDUtil.getRandomCode(3);
                if(payType == 1){//微信支付
                    if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
                        return ResultUtil.error("未授权微信,无法完成支付");
                    }
                    orderCancel.setPayType(1);
                    orderCancelService.updateById(orderCancel);
                    resultUtil =  payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
                    if(resultUtil.getCode()==200){
                        paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据
                        new Thread(()->{
                            int num = 1;
                            int min = 5000;
                            int w = 0;
                            while (num <= 10) {
                                try {
                                    w += min * num;
                                    OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(id);
                                    if (orderPrivateCar1.getState() == 10) {
                                        break;
                                    }
                                    if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
                                        String transaction_id = resultUtil1.getData().get("transaction_id").toString();
                                        payCancelOrderPrivateCar(id, transaction_id, 1);
                                        break;
                                    }
                                    if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
                                    ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI");
                                    if (resultUtil1.getCode() == 200) {
                                        /**
                                         * SUCCESS--支付成功
                                         * REFUND--转入退款
                                         * NOTPAY--未支付
                                         * CLOSED--已关闭
                                         * REVOKED--已撤销(刷卡支付)
                                         * USERPAYING--用户支付中
                                         * PAYERROR--支付失败(其他原因,如银行返回失败)
                                         * ACCEPT--已接收,等待扣款
                                         */
                                        String s = resultUtil1.getData().get("trade_state").toString();
                                        if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
                                            break;
                                        }
                                        if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
                                            String transaction_id = resultUtil1.getData().get("transaction_id").toString();
                                            payCancelOrderPrivateCar(id, transaction_id, 1);
                                            break;
                                        }
                                        if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
                                            Thread.sleep(w);
                                            num++;
                                        }
                                    } else {
                                        Thread.sleep(w);
                                        num++;
                                    }
                                } else {
                                    Thread.sleep(w);
                                    num++;
                                }catch (Exception e){
                                    e.printStackTrace();
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                    }).start();
                }else{
                    resultUtil = ResultUtil.error("支付失败", "");
                        }).start();
                    }else{
                        resultUtil = ResultUtil.error("支付失败", "");
                    }
                }
            }
            if(payType == 2){//支付宝支付
                orderCancel.setPayType(2);
                orderCancelService.updateById(orderCancel);
                resultUtil =  payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi");
                if(resultUtil.getCode()==200){
                    paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据
                    resultUtil = resultUtil;
                }else{
                    resultUtil = ResultUtil.error("支付失败", "");
                if(payType == 2){//支付宝支付
                    orderCancel.setPayType(2);
                    orderCancelService.updateById(orderCancel);
                    resultUtil =  payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi");
                    if(resultUtil.getCode()==200){
                        paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据
                        resultUtil = resultUtil;
                    }else{
                        resultUtil = ResultUtil.error("支付失败", "");
                    }
                }
            }
            if(payType == 3){//余额支付
                if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){
                    return ResultUtil.error("余额不足,无法完成支付", "");
                }
                userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                //添加交易明细
                transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id);
                userInfoService.updateById(userInfo);
                //解除小号绑定
                if(payType == 3){//余额支付
                    if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){
                        return ResultUtil.error("余额不足,无法完成支付", "");
                    }
                    userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                    //添加交易明细
                    transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id);
                    userInfoService.updateById(userInfo);
                    //解除小号绑定
//                if(orderPrivateCar.getBindId() != null){
//                    chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX());
//                }
                orderPrivateCar.setState(10);
                orderPrivateCar.setTelX("");
                orderPrivateCar.setBindId("");
                this.updateById(orderPrivateCar);
                orderCancel.setState(2);
                orderCancel.setPayType(3);
                orderCancelService.updateById(orderCancel);
                //添加已收入明细
                incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney());
                //添加已收入明细
                Company company = companyService.selectById(orderPrivateCar.getCompanyId());
                Double taxi = company.getSpeMoney();
                BigDecimal c =new BigDecimal(query.getMoney());//司机收入
                incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue());
                Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driverService.updateById(driver);
                this.deleteTask(id);//删除定时任务
                    orderPrivateCar.setState(10);
                    orderPrivateCar.setTelX("");
                    orderPrivateCar.setBindId("");
                    this.updateById(orderPrivateCar);
                    orderCancel.setState(2);
                    orderCancel.setPayType(3);
                    orderCancelService.updateById(orderCancel);
                    //添加已收入明细
                    incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney());
                    //添加已收入明细
                    Company company = companyService.selectById(orderPrivateCar.getCompanyId());
                    Double taxi = company.getSpeMoney();
                    BigDecimal c =new BigDecimal(query.getMoney());//司机收入
                    incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue());
                    Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
                    driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                    driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                    driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                    driverService.updateById(driver);
                    this.deleteTask(id);//删除定时任务
//                new Thread(new Runnable() {
//                    @Override
@@ -809,10 +824,15 @@
//                        pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
//                    }
//                }).start();
                //添加消息
                systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1);
                    //添加消息
                    systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            redisUtil.unlock(id + "_cancleOrder");
        }
        return resultUtil;
    }
@@ -851,7 +871,7 @@
                            for(Driver driver : list){//开始进行推送
                                // 判断该司机是否有30分钟内预约单
                                long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(30).isBefore(LocalDateTime.now())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())
                                        && DateUtil.dateToLocalDateTime(orderPrivateCar1.getTravelTime()).isAfter(LocalDateTime.now())).count();
                                if(orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())){
                                    continue;
@@ -880,6 +900,14 @@
                        if(i == querys.size() && state == 1){
                            pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
                            orderIds.remove(orderPrivateCar.getId());
                            // 第三轮取消订单
                            orderPrivateCar.setState(10);
                            orderPrivateCarMapper.updateById(orderPrivateCar);
                            // 添加站内信
                            systemNoticeService.addSystemNotice(1, "当前区域未能及时为您匹配到合适车辆。为避免耽误您的行程,系统已自动取消订单,建议您稍后重新尝试。", orderPrivateCar.getUserId(), 1);
                            // TODO 0731 添加短信发送
                        }
                    }
                } catch (Exception e) {