liujie
2026-04-12 dd45d210e2cbc60321fd3ed0c2ef5a0ba533faf5
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -431,6 +431,7 @@
               orderPrivateCar.setTotalPeopleNum(peopleNum);
               orderPrivateCar.setIsReassign(1);
               orderPrivateCar.setIsDelete(1);
               orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
               this.insert(orderPrivateCar);
               
               if (orderSource == 2) {//扫码下单
@@ -506,6 +507,7 @@
                  orderPrivateCar.setTotalPeopleNum(peopleNum);
                  orderPrivateCar.setIsReassign(1);
                  orderPrivateCar.setIsDelete(1);
                  orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
                  this.insert(orderPrivateCar);
                  this.pushOrder(orderPrivateCar);
               } else {
@@ -523,6 +525,7 @@
                  orderPrivateCar.setIsReassign(1);
                  orderPrivateCar.setIsDelete(1);
                  orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid());
                  orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
                  this.insert(orderPrivateCar);
                  //修改总订单人数
                  OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar();
@@ -743,6 +746,7 @@
            orderPrivateCar.setTotalPeopleNum(peopleNum);
            orderPrivateCar.setIsReassign(1);
            orderPrivateCar.setIsDelete(1);
            orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
            //判断独享,一口价,拼车
            JSONArray jsonArray = JSON.parseArray(serverCarModel);
@@ -1952,6 +1956,9 @@
      if (orderPrivateCar.getState() != 7) {
         return ResultUtil.error("订单不在待支付状态,不允许支付", "");
      }
      if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
         return ResultUtil.error("订单退款处理中,请等待退款完成", "");
      }
      Integer uid = orderPrivateCar.getUserId();
      Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
      UserInfo userInfo = userInfoService.selectById(uid);
@@ -2007,12 +2014,14 @@
      orderMoney = orderMoney < 0 ? 0 : orderMoney;
      if (payType == 1) {//微信支付
         String app = type == 1 ? "APP" : "JSAPI";
         resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据
         String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
         resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据
      }
      if (payType == 2) {//支付宝支付
         resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
         String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
         resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi");
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据
      }
      if (payType == 3) {//余额支付
         if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
@@ -2021,29 +2030,32 @@
         
         userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         
         boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
         boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
         if (isPrepayFirstStage) {
            handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
            return resultUtil;
         }
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
         userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
         //添加交易明细
         transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId);
         userInfoService.updateById(userInfo);
         orderPrivateCar.setState(8);
         orderPrivateCar.setPayType(3);
         orderPrivateCar.setPayMoney(orderMoney);
         orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney);
         orderPrivateCar.setPayTime(new Date());
         //处理优惠券和红包
         if (null != userCouponRecord) {
            userCouponRecord.setState(2);
            userCouponRecord.setEndTime(new Date());
            userCouponRecordService.updateById(userCouponRecord);
         if (isPrepaySpreadStage) {
            orderPrivateCar.setPrepayStage(5);
            orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId));
         }
         if (null != query) {
            query.setState(2);
            query.setEndTime(new Date());
            userRedPacketRecordService.updateById(query);
         if (!isPrepaySpreadStage) {
            consumePrivateCarBenefits(orderPrivateCar);
         }
         //非追缴单才需要添加收入
         if(0 == orderPrivateCar.getRecoveryOrder()){
@@ -2087,6 +2099,9 @@
      }
      if (orderPrivateCar.getState() != 7) {
         return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>());
      }
      if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
         return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>());
      }
      Integer uid = orderPrivateCar.getUserId();
@@ -2259,8 +2274,9 @@
            return ResultUtil.error("请使用余额支付");
         }
         String app = type == 1 ? "APP" : "JSAPI";
         resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据
         String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
         resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据
         //创建定时任务查询订单支付状态
         ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
@@ -2291,8 +2307,9 @@
         if (orderMoney == 0) {
            return ResultUtil.error("请使用余额支付");
         }
         resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
         String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
         resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi");
         paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据
      }
      if (payType == 3) {//余额支付
         if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
@@ -2300,7 +2317,14 @@
         }
         userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
         boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
         if (isPrepayFirstStage) {
            handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
            return resultUtil;
         }
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
         if (null != query1) {
@@ -2313,22 +2337,15 @@
         
         orderPrivateCar.setState(8);
         orderPrivateCar.setPayType(3);
         orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney);
         orderPrivateCar.setPayTime(new Date());
         //处理优惠券和红包
         if (null != userCouponRecord) {
            userCouponRecord.setState(2);
            userCouponRecord.setEndTime(new Date());
            userCouponRecordService.updateById(userCouponRecord);
         if (isPrepaySpreadStage) {
            orderPrivateCar.setPrepayStage(5);
            orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId));
         }
         //处理打车卡
         if (null != userTaxiCard) {
            userTaxiCardService.updateById(userTaxiCard);
         }
         if (null != query) {
            query.setState(2);
            query.setEndTime(new Date());
            userRedPacketRecordService.updateById(query);
         if (!isPrepaySpreadStage) {
            consumePrivateCarBenefits(orderPrivateCar);
         }
         //非追缴单才添加收入记录
         if(0 == orderPrivateCar.getRecoveryOrder()){
@@ -2519,54 +2536,153 @@
         System.err.println("预支付数据异常(orderId = " + id + ")");
      }
   }
   private boolean isPrivateCarPrepayFirstStage(OrderPrivateCar orderPrivateCar) {
      return orderPrivateCar != null
            && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
            && Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage());
   }
   private boolean isPrivateCarPrepaySpreadStage(OrderPrivateCar orderPrivateCar) {
      return orderPrivateCar != null
            && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
            && Integer.valueOf(3).equals(orderPrivateCar.getPrepayStage());
   }
   private String buildBalancePayNo(Integer orderType, Integer orderId) {
      return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis();
   }
   private Double appendPayMoney(Double source, Double amount) {
      return new BigDecimal(source == null ? 0D : source)
            .add(new BigDecimal(amount == null ? 0D : amount))
            .setScale(2, BigDecimal.ROUND_HALF_EVEN)
            .doubleValue();
   }
   private void consumePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception {
      if (null != orderPrivateCar.getCouponId()) {
         UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
         if (userCouponRecord != null) {
            userCouponRecord.setState(2);
            userCouponRecord.setEndTime(new Date());
            userCouponRecordService.updateById(userCouponRecord);
         }
      }
      if (null != orderPrivateCar.getUserTaxiCardId()) {
         UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
         if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) {
            JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
            jsonObject.put("time", jsonObject.getInteger("time") - 1);
            userTaxiCard.setContent(jsonObject.toJSONString());
            userTaxiCardService.updateById(userTaxiCard);
         }
      }
      if (null != orderPrivateCar.getRedPacketId()) {
         UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
         if (userRedPacketRecord != null) {
            userRedPacketRecord.setState(2);
            userRedPacketRecord.setEndTime(new Date());
            userRedPacketRecordService.updateById(userRedPacketRecord);
         }
      }
   }
   private void dispatchPrepayPrivateCarOrder(OrderPrivateCar orderPrivateCar) throws Exception {
      if (Integer.valueOf(3).equals(orderPrivateCar.getType()) && ToolUtil.isNotEmpty(orderPrivateCar.getServerCarModel())) {
         JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getServerCarModel());
         for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Integer serverCarModelId = jsonObject.getInteger("serverCarModelId");
            Integer rideType = jsonObject.getInteger("rideType");
            if (serverCarModelId != null && serverCarModelId == 0) {
               OrderTaxi orderTaxi = new OrderTaxi();
               orderTaxi.setId(orderPrivateCar.getId());
               orderTaxi.setState(1);
               orderTaxi.setUserId(orderPrivateCar.getUserId());
               orderTaxi.setStartLon(orderPrivateCar.getStartLon());
               orderTaxi.setStartLat(orderPrivateCar.getStartLat());
               orderTaxiService.pushOrder(orderTaxi, 3);
               continue;
            }
            OrderPrivateCar pushOrder = new OrderPrivateCar();
            BeanUtils.copyProperties(orderPrivateCar, pushOrder);
            pushOrder.setRideType(rideType);
            pushOrder.setServerCarModelId(serverCarModelId);
            this.pushOrder(pushOrder);
         }
         return;
      }
      if (Integer.valueOf(3).equals(orderPrivateCar.getRideType())) {
         this.pushOrderPrivateCar(orderPrivateCar.getId());
         return;
      }
      this.pushOrder(orderPrivateCar);
   }
   private void handlePrivateCarPrepayFirstPaid(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double payAmount, Integer payType) throws Exception {
      OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
      SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
      if (null != query1) {
         userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral()));
      }
      userInfoService.updateById(userInfo);
      consumePrivateCarBenefits(orderPrivateCar);
      transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", payAmount, 2, 1, 1, 1, orderPrivateCar.getId());
      orderPrivateCar.setState(1);
      orderPrivateCar.setPayType(payType);
      orderPrivateCar.setPayMoney(payAmount);
      orderPrivateCar.setPayTime(new Date());
      orderPrivateCar.setPrepayStage(2);
      this.updateAllColumnById(orderPrivateCar);
      pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
      systemNoticeService.addSystemNotice(1, "您的快车订单已支付成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
      dispatchPrepayPrivateCarOrder(orderPrivateCar);
   }
   
   @Override
   public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception {
   public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, String outTradeNo) throws Exception {
      OrderPrivateCar orderPrivateCar = this.selectById(id);
      PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
      PaymentRecord query = ToolUtil.isNotEmpty(outTradeNo) ? paymentRecordService.queryByCode(outTradeNo, 1) : null;
      if (query == null) {
         query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
      }
      if (null != query && query.getState() == 1) {
         UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
         query.setState(2);
         query.setCode(order_id);
         paymentRecordService.updateById(query);
         if (isPrivateCarPrepayFirstStage(orderPrivateCar)) {
            handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type);
            return;
         }
         //添加交易明细
         transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
         orderPrivateCar.setState(8);
         orderPrivateCar.setPayType(type);
         orderPrivateCar.setPayMoney(query.getAmount());
         boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
         orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), query.getAmount()) : query.getAmount());
         orderPrivateCar.setPayTime(new Date());
         UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
         if (isPrepaySpreadStage) {
            orderPrivateCar.setPrepayStage(5);
            orderPrivateCar.setPrepaySecondPayNo(order_id);
         }
         OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
         if(null != query1){
            userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
            userInfoService.updateById(userInfo);
         }
         //处理优惠券和红包
         if (null != orderPrivateCar.getCouponId()) {
            UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
            userCouponRecord.setState(2);
            userCouponRecord.setEndTime(new Date());
            userCouponRecordService.updateById(userCouponRecord);
         if (!isPrepaySpreadStage) {
            consumePrivateCarBenefits(orderPrivateCar);
         }
         if (null != orderPrivateCar.getUserTaxiCardId()) {
            UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
            if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) {
               JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
               jsonObject.put("time", jsonObject.getInteger("time") - 1);
               userTaxiCard.setContent(jsonObject.toJSONString());
               userTaxiCardService.updateById(userTaxiCard);
            }
         }
         if (null != orderPrivateCar.getRedPacketId()) {
            UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
            userRedPacketRecord.setState(2);
            userRedPacketRecord.setEndTime(new Date());
            userRedPacketRecordService.updateById(userRedPacketRecord);
         }
         query.setState(2);
         query.setCode(order_id);
         paymentRecordService.updateById(query);
         //非追缴单才需要记录收入
         if(null != orderPrivateCar.getRecoveryOrder() && 0 == orderPrivateCar.getRecoveryOrder()){