From b3d1411517baca17d92dcfe3a0933cdc342b3145 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 16 五月 2026 11:52:41 +0800
Subject: [PATCH] Merge branch '1.1' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |  276 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 169 insertions(+), 107 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index 1232329..5475beb 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -21,10 +21,8 @@
 import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
 import com.xiaopeng.api.dto.map.RouteAndFareDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
-import com.xiaopeng.api.dto.order.GetOrderNumDto;
-import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
-import com.xiaopeng.api.dto.order.HistoryStartPointsDto;
-import com.xiaopeng.api.dto.order.PopOrderDto;
+import com.xiaopeng.api.dto.order.*;
+import com.xiaopeng.api.dto.payFront.*;
 import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
 import com.xiaopeng.api.dto.statistics.DailyCountDTO;
 import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
@@ -61,6 +59,7 @@
 import com.xiaopeng.api.vo.operation.NearestNextVo;
 import com.xiaopeng.api.vo.operation.RouteVo;
 import com.xiaopeng.api.vo.order.*;
+import com.xiaopeng.api.vo.payFront.*;
 import com.xiaopeng.api.vo.order.FareBreakdownVo;
 import com.xiaopeng.api.vo.payFront.CreditOrderCreateVo;
 import com.xiaopeng.api.vo.payFront.CreditPaySignQueryVo;
@@ -78,6 +77,7 @@
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.DateUtils;
 import com.xiaopeng.common.core.utils.GeodesyUtil;
+import com.xiaopeng.common.core.utils.OrderCodeUtil;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.web.domain.BaseModel;
 import com.xiaopeng.common.core.web.page.PageInfo;
@@ -3353,105 +3353,110 @@
     public R payment(XpOrderPayDto dto, String uid) {
 
 
+        XpOrder order = this.getById(dto.getOrderId());
+
         HashMap<String, Object> resultMap = new HashMap<>();
 
         // 1.0 免密  //查询是否开通免密
         // 1先查用户是否申请  申请了拿到通过的businessOrderId
-//        boolean signed = false;
-//        CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
-//        creditPaySignQueryDto.setUid(Long.valueOf(uid));
-//        creditPaySignQueryDto.setBusinessId("xp-robotaxi");
-//        creditPaySignQueryDto.setCategory("009001");
-//        creditPaySignQueryDto.setBusinessOrderId("");
-//        R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
-//        if (creditPaySignQueryVoR.getCode()==200) {
-//            CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
-//            // 查看是否有签约的
-//            long count = data.getSignList().stream().filter(e -> e.getStatus().equals("VALID")).count();
-//            if (count > 0){
-//                signed = true;
-//            }
-//        }
-//
-//
-//        if(signed){
-//            // y已签约 1.信用下单
-//            CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
-//            creditOrderCreateDto.setUid(Long.valueOf(uid));
-//            creditOrderCreateDto.setBusinessId("xp-robotaxi");
-//            creditOrderCreateDto.setCategory("xp_robotaxi_api");
-//            creditOrderCreateDto.setBusinessOrderId("");
-//            creditOrderCreateDto.setSubject("009001");
-//            creditOrderCreateDto.setPayType("13");
-//
-//
-//            // 信用下单
-//            ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
-//            CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
-//            postPayment.setName("收费标准");
-//            postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
-//            postPayments.add(postPayment);
-//            creditOrderCreateDto.setPostPayments(postPayments);
-//            R<CreditOrderCreateVo> creditOrderCreateVoR = xpPayFrontClient.createCreditOrder(creditOrderCreateDto);
-//            if(creditOrderCreateVoR.getCode()==200){
-//                CreditOrderCreateVo data = creditOrderCreateVoR.getData();
-//                resultMap.put("status", 1);
-//                resultMap.put("value", data);
-//                return R.ok(resultMap);
-//            }
-//
-//        }else {
-//
-//            // 未签约
-//            // 调用预下单接口
-//            XpOrder order = this.getById(dto.getOrderId());
-//            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
-//            creditPrecreateDto.setUid(uid);
-//            creditPrecreateDto.setBizId("xp-robotaxi");
-//            creditPrecreateDto.setBizOrderId("");
-//            creditPrecreateDto.setPayScene(99);
-//            creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
-//            creditPrecreateDto.setCategory("009001");
-//            creditPrecreateDto.setTitle("信用下单");
-//            creditPrecreateDto.setDetail("信用下单");
-//
-//            HashMap<String, String> businessExtend = new HashMap<>();
-//            businessExtend.put("returnUrl", "");
-//            businessExtend.put("notifyUrl", "");
-//            creditPrecreateDto.setBusinessExtend(businessExtend);
-//
-//            R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
-//            if (creditPrecreateVoR.getCode()==200) {
-//                CreditPrecreateVo data = creditPrecreateVoR.getData();
-//                resultMap.put("status", 2);
-//                resultMap.put("value", data);
-//                return R.ok(resultMap);
-//            }
-//        }
+        boolean signed = false;
+        CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
+        creditPaySignQueryDto.setUid(Long.valueOf(uid));
+        creditPaySignQueryDto.setBusinessId("xp-robotaxi");
+        creditPaySignQueryDto.setCategory("009001");
+        creditPaySignQueryDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+        R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
+        if (creditPaySignQueryVoR.getCode()==200) {
+            CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
+            // 查看是否有签约的
+            long count = data.getSignList().stream().filter(e -> e.getStatus().equals("VALID")).count();
+            if (count > 0){
+                signed = true;
+            }
+        }
+
+
+        if(signed){
+            // y已签约 1.信用下单
+            CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
+            creditOrderCreateDto.setUid(Long.valueOf(uid));
+            creditOrderCreateDto.setBusinessId("xp-robotaxi");
+            creditOrderCreateDto.setCategory("009001");
+            creditOrderCreateDto.setBusinessOrderId("");
+            creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
+            creditOrderCreateDto.setPayType("13");
+
+
+            // 信用下单
+            ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
+            CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
+            postPayment.setName("收费标准");
+            postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
+            postPayments.add(postPayment);
+            creditOrderCreateDto.setPostPayments(postPayments);
+            R<CreditOrderCreateVo> creditOrderCreateVoR = xpPayFrontClient.createCreditOrder(creditOrderCreateDto);
+            if(creditOrderCreateVoR.getCode()==200){
+                CreditOrderCreateVo data = creditOrderCreateVoR.getData();
+                resultMap.put("status", 1);
+                resultMap.put("value", data);
+
+                order.setPayType(3);
+                order.setAuthOrderId(data.getAuthOrderId());
+
+                return R.ok(resultMap);
+            }
+
+        }else {
+
+            // 未签约
+            // 调用预下单接口
+            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
+            creditPrecreateDto.setUid(uid);
+            creditPrecreateDto.setBizId("xp-robotaxi");
+            creditPrecreateDto.setBizOrderId("");
+            creditPrecreateDto.setPayScene(99);
+            creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
+            creditPrecreateDto.setCategory("009001");
+            creditPrecreateDto.setTitle("信用下单");
+            creditPrecreateDto.setDetail("信用下单");
+
+            HashMap<String, String> businessExtend = new HashMap<>();
+            businessExtend.put("returnUrl", "");
+            businessExtend.put("notifyUrl", "");
+            creditPrecreateDto.setBusinessExtend(businessExtend);
+
+            R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
+            if (creditPrecreateVoR.getCode()==200) {
+                CreditPrecreateVo data = creditPrecreateVoR.getData();
+                resultMap.put("status", 2);
+                resultMap.put("value", data);
+                return R.ok(resultMap);
+            }
+        }
 
 
 
         // mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可
-        XpOrder order = this.getById(dto.getOrderId());
-        order.setStatus(9);
-        order.setAppUserId(null);
-        if (order.getCouponId() != null) {
-            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
-            useUserCouponDto.setUserCouponId(order.getCouponId());
-            R<BigDecimal> decimalR = xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
-            if (decimalR.getCode() == 200) {
-                order.setCouponMoney(decimalR.getData());
-                if (order.getCouponMoney().compareTo(order.getOrderMoney()) > 0) {
-                    order.setPayMoney(BigDecimal.ZERO);
-                    order.setCouponMoney(order.getOrderMoney());
-                } else {
-                    order.setPayMoney(order.getOrderMoney().subtract(decimalR.getData()));
-                }
-            }
-        }
-        baseMapper.updateById(order);
-        bootCommonService.setCache_orderStatus(order.getId(), order, null);
-        return R.ok();
+//        XpOrder order = this.getById(dto.getOrderId());
+//        order.setStatus(9);
+//        order.setAppUserId(null);
+//        if (order.getCouponId() != null) {
+//            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
+//            useUserCouponDto.setUserCouponId(order.getCouponId());
+//            R<BigDecimal> decimalR = xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
+//            if (decimalR.getCode() == 200) {
+//                order.setCouponMoney(decimalR.getData());
+//                if (order.getCouponMoney().compareTo(order.getOrderMoney()) > 0) {
+//                    order.setPayMoney(BigDecimal.ZERO);
+//                    order.setCouponMoney(order.getOrderMoney());
+//                } else {
+//                    order.setPayMoney(order.getOrderMoney().subtract(decimalR.getData()));
+//                }
+//            }
+//        }
+//        baseMapper.updateById(order);
+//        bootCommonService.setCache_orderStatus(order.getId(), order, null);
+        return R.fail();
     }
 
     /**
@@ -3858,13 +3863,13 @@
                 vo.setVin(vehicle.getVehicleVin());
                 vo.setPassengerUid(order.getAppUserId());
                 BaseVehicleUserDto deliver = bluetoothUnlockClient.deliver(vo);
-//                if(null == deliver){
-//                    throw new ServiceException("下发蓝牙token失败");
-//                }
-//                if(deliver.getCode() != 0){
-//                    log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber());
-//                    throw new ServiceException(deliver.getMsg());
-//                }
+                if(null == deliver){
+                    throw new ServiceException("下发蓝牙token失败");
+                }
+                if(deliver.getCode() != 0){
+                    log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber());
+                    throw new ServiceException(deliver.getMsg());
+                }
                 log.info("下发蓝牙token成功:{} {}", deliver.getData(), order.getOrderNumber());
             }
 
@@ -4732,6 +4737,59 @@
         return vo;
     }
 
+    /**
+     * 查询订单状态
+     * @param orderId
+     * @return
+     */
+    @Override
+    public OrderStatusFromOrderIdVo queryOrderStatusFromOrderId(Long orderId) {
+
+        XpOrder order = this.getById(orderId);
+        if(order==null){
+            return null;
+        }
+        if(order.getPayType()==3){
+            // 免密查询 如果成功则调用结算
+            CreditOrderQueryDto dto = new CreditOrderQueryDto();
+            dto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+            dto.setAuthOrderId(order.getAuthOrderId());
+            dto.setPayType("13");
+            R<CreditOrderQueryVo> creditOrderQueryVoR = xpPayFrontClient.queryCreditOrder(dto);
+            if(creditOrderQueryVoR.getCode()==200){
+                CreditOrderQueryVo creditOrderQueryVo = creditOrderQueryVoR.getData();
+                if(creditOrderQueryVo.getCreditOrderStatus().equals("DONE")){
+                    // 订单确认 需要吊起扣款
+                    CreditOrderWxPayDto creditOrderWxPayDto = new CreditOrderWxPayDto();
+                    creditOrderWxPayDto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+                    creditOrderWxPayDto.setAuthOrderId(order.getAuthOrderId());
+                    creditOrderWxPayDto.setPayCallbackUrl("13");
+                    creditOrderWxPayDto.setTotalAmount( order.getOrderMoney().multiply(BigDecimal.valueOf(100)).longValue());
+                    creditOrderWxPayDto.setSubject("小鹏集团|robotaxi");
+                    creditOrderWxPayDto.setPayType("13");
+
+                    List<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>();
+                    CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
+                    postPayment.setName("收费标准");
+                    postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
+                    postPayments.add(postPayment);
+                    creditOrderWxPayDto.setPostPayments(postPayments);
+                    R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(creditOrderWxPayDto);
+                }else if(creditOrderQueryVo.getCreditOrderStatus().equals("CREATED") || creditOrderQueryVo.getCreditOrderStatus().equals("DOING")){
+
+                }
+            }
+
+        }else {
+            // 微信支付也需要查询下
+
+        }
+        OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
+        orderStatusFromOrderIdVo.setOrderId(order.getId());
+        orderStatusFromOrderIdVo.setStatus(order.getStatus());
+        return orderStatusFromOrderIdVo;
+    }
+
 
     /**
      * 发票列表
@@ -4741,18 +4799,22 @@
     @Override
     public List<XpInvoiceVo> invoiceList(XpOrderInvoiceQuery query) {
 
-        // 格式:yyyyMM 转yyyy-MM
-        query.setStartTime(query.getStartTime().substring(0, 4) + "-" + query.getStartTime().substring(4, 6));
-        query.setEndTime(query.getEndTime().substring(0, 4) + "-" + query.getEndTime().substring(4, 6));
+        DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyyMM");
+        LocalDateTime startTime = YearMonth.parse(query.getStartTime(), monthFormatter)
+                .atDay(1)
+                .atStartOfDay();
+        LocalDateTime endTime = YearMonth.parse(query.getEndTime(), monthFormatter)
+                .atEndOfMonth()
+                .atTime(23, 59, 59);
 
         List<XpOrder> list =null;
         // 通过uid 和时间查出来数据  先判断是否传入了分页
         if (query.getPageNo()!=null && query.getPageSize()!=null) {
             Page<XpOrder> page = new Page<>(query.getPageNo(), query.getPageSize());
-            Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, query.getStartTime(), query.getEndTime()));
+            Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime));
             list = orderPage.getRecords();
         }else {
-            list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, query.getStartTime(), query.getEndTime()));
+            list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime));
         }
 
         if(list.isEmpty()){

--
Gitblit v1.7.1