From 2d0312de30b3783ecf254d146dc6322d74690762 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 19 五月 2026 09:28:57 +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 |  339 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 249 insertions(+), 90 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 3a2686e..fc3b1a3 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
@@ -18,6 +18,9 @@
 import com.xiaopeng.api.dto.account.UseUserCouponDto;
 import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
 import com.xiaopeng.api.dto.automaticPilot.VehicleEventDTO;
+import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventCouponLineDTO;
+import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestContentDTO;
+import com.xiaopeng.api.dto.frdXfipEvent.XpFrdXfipEventIngestReqDTO;
 import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
 import com.xiaopeng.api.dto.map.RouteAndFareDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
@@ -34,6 +37,7 @@
 import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
 import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
 import com.xiaopeng.api.feignClient.automaticPilot.VehicleBuriedPointClient;
+import com.xiaopeng.api.feignClient.frdXfipEvent.XpFrdXfipEventClient;
 import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient;
 import com.xiaopeng.api.feignClient.map.XpMapClient;
 import com.xiaopeng.api.feignClient.map.XpStationClient;
@@ -57,6 +61,7 @@
 import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
 import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderStatus;
 import com.xiaopeng.api.vo.automaticPilot.protobuf.TaskActionType;
+import com.xiaopeng.api.vo.frdXfipEvent.XpFrdXfipEventIngestRespVO;
 import com.xiaopeng.api.vo.operation.NearestNextVo;
 import com.xiaopeng.api.vo.operation.RouteVo;
 import com.xiaopeng.api.vo.order.*;
@@ -218,6 +223,9 @@
     private XpPayFrontClient xpPayFrontClient;
     @Resource
     private XpStationClient xpStationClient;
+
+    @Resource
+    private XpFrdXfipEventClient xpFrdXfipEventClient;
 
     @Value("${robotaxi.appId:xp_robotaxi_api}")
     private String appid;
@@ -3418,87 +3426,100 @@
     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(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);
-//            }
-//        }
-//        return R.fail();
+        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(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(OrderCodeUtil.getOrderCode("MMZF"));
+            creditOrderCreateDto.setSubject("小鹏集团|robotaxi");
+            creditOrderCreateDto.setPayType("13");
+            creditOrderCreateDto.setPayCallbackUrl("");
+
+            creditOrderCreateDto.setBusinessExtendData("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
+
+
+
+            // 信用下单
+            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());
+                order.setBusinessOrderId(creditOrderCreateDto.getBusinessOrderId());
+                order.setMainOrderId(order.getOrderNumber());
+
+                return R.ok(resultMap);
+            }
+
+        }else {
+
+            // 未签约
+            // 调用预下单接口
+            CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
+            creditPrecreateDto.setUid(uid);
+            creditPrecreateDto.setBizId("xp-robotaxi");
+            creditPrecreateDto.setBizOrderId(OrderCodeUtil.getOrderCode("MMZF"));
+            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);
+
+            creditPrecreateDto.setExtBusinessData2("{\"mainOrderId\":\"" +order.getOrderNumber() + "\"}");
+
+            R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
+            if (creditPrecreateVoR.getCode()==200) {
+                CreditPrecreateVo data = creditPrecreateVoR.getData();
+                resultMap.put("status", 2);
+                resultMap.put("value", data);
+
+                order.setPayType(1);
+                order.setBusinessOrderId(creditPrecreateDto.getBizOrderId());
+                order.setMainOrderId(order.getOrderNumber());
+                this.updateById(order);
+
+                return R.ok(resultMap);
+            }
+        }
 
 
 
@@ -3522,7 +3543,7 @@
         }
         baseMapper.updateById(order);
         bootCommonService.setCache_orderStatus(order.getId(), order, null);
-        return R.ok();
+        return R.fail();
     }
 
     /**
@@ -4885,19 +4906,157 @@
                     postPayments.add(postPayment);
                     creditOrderWxPayDto.setPostPayments(postPayments);
                     R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(creditOrderWxPayDto);
-                }else if(creditOrderQueryVo.getCreditOrderStatus().equals("CREATED") || creditOrderQueryVo.getCreditOrderStatus().equals("DOING")){
-
                 }
             }
 
         }else {
             // 微信支付也需要查询下
+            PayOrderQueryDto queryDto = new PayOrderQueryDto();
+            queryDto.setBizId("xp-robotaxi");
+            queryDto.setBizOrderId(order.getBusinessOrderId());
+            R<PayOrderQueryVo> payOrderQueryVoR = xpPayFrontClient.queryPayOrder(queryDto);
+            if(payOrderQueryVoR.getCode()==200){
+                PayOrderQueryVo payOrderQueryVo = payOrderQueryVoR.getData();
+                if(payOrderQueryVo.getPayStatus()==1){
+                    // 支付成功
+                    order.setStatus(9);
+                    order.setAppUserId(null);
+                    order.setAuthOrderId(payOrderQueryVo.getPayOrderId());
+
+                    if(payOrderQueryVo.getPayType()==13){
+                        order.setPayType(3);
+                    }
+
+                    this.updateById(order);
+
+                    // 财务推送
+                    xpFrdXfipEventPush(order,payOrderQueryVo.getAmount(),payOrderQueryVo.getPayOrderId());
+
+
+                }
+
+
+            }
 
         }
         OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo();
         orderStatusFromOrderIdVo.setOrderId(order.getId());
         orderStatusFromOrderIdVo.setStatus(order.getStatus());
         return orderStatusFromOrderIdVo;
+    }
+
+    @Override
+    public void creditPayCall(XpOrder order) {
+
+
+        CreditOrderWxPayDto dto = new CreditOrderWxPayDto();
+        dto.setBusinessId("xp-robotaxi");
+        dto.setBusinessOrderId(order.getBusinessOrderId());
+        dto.setAuthOrderId(order.getAuthOrderId());
+        dto.setCategory("009001");
+        dto.setPayCallbackUrl("");
+        dto.setTotalAmount(order.getOrderMoney().multiply(BigDecimal.valueOf(100)).longValue());
+        dto.setSubject("小鹏集团|robotaxi");
+        dto.setPayType("13");
+        List<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>();
+        CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
+        postPayment.setName("收费标准");
+        postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
+        dto.setPostPayments(postPayments);
+        R<CreditOrderWxPayVo> creditOrderWxPayVoR = xpPayFrontClient.creditOrderWxPay(dto);
+
+
+    }
+
+    /**
+     * 对接财务数据推送
+     * @param order
+     */
+    @Override
+    public void xpFrdXfipEventPush(XpOrder order,Long payFee,String orderId) {
+
+        if(order.getFrdXfipEvenetStatus()==1){
+            return;
+        }
+
+        XpFrdXfipEventIngestReqDTO xpFrdXfipEventIngestReqDTO = new XpFrdXfipEventIngestReqDTO();
+        xpFrdXfipEventIngestReqDTO.setEventId("RT_04");
+        xpFrdXfipEventIngestReqDTO.setBusinessLine("RT");
+        xpFrdXfipEventIngestReqDTO.setReqId(OrderCodeUtil.getOrderCode("FRDXFOPEVENT"));
+
+        XpFrdXfipEventIngestContentDTO xpFrdXfipEventIngestContentDTO = new XpFrdXfipEventIngestContentDTO();
+        xpFrdXfipEventIngestContentDTO.setCompanyCode("8000");
+        xpFrdXfipEventIngestContentDTO.setOrderType("SELF_OPERATED");
+        xpFrdXfipEventIngestContentDTO.setBusinessOrderNo(order.getMainOrderId());
+        xpFrdXfipEventIngestContentDTO.setSubOrderNo(order.getBusinessOrderId());
+        xpFrdXfipEventIngestContentDTO.setPaymentType("POST_PAY");
+        xpFrdXfipEventIngestContentDTO.setOrderStatus("结算完成");
+        xpFrdXfipEventIngestContentDTO.setSettlementDate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+        xpFrdXfipEventIngestContentDTO.setMaterialNo("XE2000398");
+        xpFrdXfipEventIngestContentDTO.setBusinessPartnerCode("5004901");
+        xpFrdXfipEventIngestContentDTO.setCurrency("CNY");
+
+        xpFrdXfipEventIngestContentDTO.setConfirmedRevenueAmount(order.getOrderMoney());
+        xpFrdXfipEventIngestContentDTO.setCashCollectedAmount(new BigDecimal(payFee).divide(BigDecimal.valueOf(100), 2,RoundingMode.HALF_UP));
+
+        xpFrdXfipEventIngestContentDTO.setCouponConsumedTotal(order.getCouponMoney()==null?BigDecimal.ZERO:order.getCouponMoney());
+
+        xpFrdXfipEventIngestContentDTO.setPaymentFlowNo(orderId);
+        xpFrdXfipEventIngestContentDTO.setPaymentFlowAmount(new BigDecimal(payFee).divide(BigDecimal.valueOf(100), 2,RoundingMode.HALF_UP));
+        xpFrdXfipEventIngestContentDTO.setPaymentChannel("WECHAT");
+
+        if(order.getCouponId()!=null){
+            ArrayList<XpFrdXfipEventCouponLineDTO> list = new ArrayList<>(1);
+            XpFrdXfipEventCouponLineDTO xpFrdXfipEventCouponLineDTO = new XpFrdXfipEventCouponLineDTO();
+            xpFrdXfipEventCouponLineDTO.setCouponId(String.valueOf(order.getCouponId()));
+            xpFrdXfipEventCouponLineDTO.setCouponType("ACTIVITY");
+//            xpFrdXfipEventCouponLineDTO.setCouponIssuerCompanyCode("5004901");
+//            xpFrdXfipEventCouponLineDTO.setSelfBorneAmount(order.getCouponMoney());
+//            xpFrdXfipEventCouponLineDTO.setThirdPartyBorneAmount(BigDecimal.ZERO);
+            xpFrdXfipEventCouponLineDTO.setCouponDeductionAmount(order.getCouponMoney());
+            xpFrdXfipEventCouponLineDTO.setCouponIssuerCompanyCode("8000");
+            list.add(xpFrdXfipEventCouponLineDTO);
+            xpFrdXfipEventIngestContentDTO.setCouponLines(list);
+        }
+
+        xpFrdXfipEventIngestReqDTO.setContent(xpFrdXfipEventIngestContentDTO);
+        R<XpFrdXfipEventIngestRespVO> ingest = xpFrdXfipEventClient.ingest(xpFrdXfipEventIngestReqDTO);
+        if(ingest.getCode()==200){
+            XpFrdXfipEventIngestRespVO data = ingest.getData();
+            if(!data.getReceiveStatus().equals("REJECTED")){
+                // 推送成功
+                order.setFrdXfipEvenetStatus(1);
+                order.setFrdXfipEvenetId(data.getEventId());
+            }else {
+                // 推送失败
+                order.setFrdXfipEvenetStatus(2);
+                order.setFrdXfipEvenetId(data.getEventId());
+            }
+            log.info("xpFrdXfipEventPush:{}",data);
+        }else {
+            // 重试1次
+            ingest = xpFrdXfipEventClient.ingest(xpFrdXfipEventIngestReqDTO);
+            XpFrdXfipEventIngestRespVO data = ingest.getData();
+            if(ingest.getCode()==200){
+                if(!data.getReceiveStatus().equals("REJECTED")){
+                    // 推送成功
+                    order.setFrdXfipEvenetStatus(1);
+                    order.setFrdXfipEvenetId(data.getEventId());
+                }else {
+                    // 推送失败
+                    order.setFrdXfipEvenetStatus(2);
+                    order.setFrdXfipEvenetId(data.getEventId());
+                }
+                log.info("xpFrdXfipEventPush:{}",data);
+            }else {
+                // 推送失败
+                order.setFrdXfipEvenetStatus(2);
+                order.setFrdXfipEvenetId(data.getEventId());
+            }
+            log.info("xpFrdXfipEventPush:{}",ingest.getMsg());
+        }
+        order.setAppUserId(null);
+        updateById(order);
     }
 
 
@@ -4921,10 +5080,10 @@
         // 通过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, startTime, endTime));
+            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).orderByDesc(BaseModel::getCreateTime));
             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, startTime, endTime));
+            list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, startTime, endTime).orderByDesc(BaseModel::getCreateTime));
         }
 
         if(list.isEmpty()){
@@ -4944,18 +5103,18 @@
             xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber());
             xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney());
             xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney());
-            xpInvoiceVo.setOrderFinishTime(String.valueOf(xpOrder.getTripEnd()));
+            xpInvoiceVo.setOrderFinishTime(xpOrder.getTripEnd()!=null?String.valueOf(xpOrder.getTripEnd()):"");
             xpInvoiceVo.setXpInvoiceFlag(true);
             xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus());
             XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary();
             // yyyy-MM-dd格式
-            itinerary.setTripStartDate(xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-            itinerary.setTripEndDate(xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            itinerary.setTripStartDate(xpOrder.getAcceptanceTime()!=null?xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
+            itinerary.setTripEndDate(xpOrder.getTripEnd()!=null?xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
 
 
             XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get();
             itinerary.setCarType(xpVehicle.getVehicleModel());
-            itinerary.setTripStartDate(xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            itinerary.setTripStartDate(xpOrder.getBoardingTime()!=null?xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):"");
 
             itinerary.setCity(xpOrder.getCityName());
             itinerary.setStartPoint(xpOrder.getStartAddress());

--
Gitblit v1.7.1