zhuml4
2026-03-06 8ad3e49abf615d868460e0fab004c365148b90cb
fix:用户中心返回
1个文件已添加
7个文件已修改
364 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/UcUserInfo.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/UserResourcesClientFallbackFactory.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/UserResourcesClient.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpUserFeedbackServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -14,7 +14,7 @@
import com.xiaopeng.account.model.vo.XpAppUserCouponVo;
import com.xiaopeng.account.service.IXpAppUserCouponService;
import com.xiaopeng.account.util.holiday.HolidayUtil;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
import com.xiaopeng.api.feignClient.operation.XpCouponClient;
import com.xiaopeng.api.feignClient.operation.XpWhiteListClient;
@@ -29,7 +29,6 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
 * <p>
@@ -57,6 +56,7 @@
    /**
     * 获取用户优惠券列表
     *
     * @param query
     * @param uid
     * @return
@@ -73,6 +73,7 @@
    /**
     * 获取用户优惠券数量total
     *
     * @param uid
     * @return
     */
@@ -88,6 +89,7 @@
    /**
     * 领取优惠券
     *
     * @param dto
     * @param uid
     * @return
@@ -105,6 +107,7 @@
    /**
     * 时间规则
     *
     * @param couponList
     * @return
     */
@@ -146,9 +149,9 @@
                }
            }
            for (String phone : dto.getPhone()) {
                UserResourcesDto userByMobile = userResourcesClient.getUserByMobile(phone);
                UcUserInfo userByMobile = userResourcesClient.getUserByMobile(phone);
                if (userByMobile != null) {
                    Long uid = JSONObject.parseObject(userByMobile.getData().toString()).getLong("uid");
                    Long uid = userByMobile.getUid();
                    XpAppUserCoupon xpAppUserCoupon = new XpAppUserCoupon();
                    xpAppUserCoupon.setFullMoney(xpCoupon.getConditionalAmount());
                    xpAppUserCoupon.setMoney(xpCoupon.getAmount());
@@ -163,8 +166,8 @@
                    xpAppUserCoupon.setOpenCityId("0");
                    xpAppUserCoupon.setTimeJson("[{\"time\": [\"00:00-23:59\"], \"type\": 3, \"typeStr\": 0}]");
                    baseMapper.insert(xpAppUserCoupon);
                }else {
                    Long uid = 1l;
                } else {
                    Long uid = 1L;
                    XpAppUserCoupon xpAppUserCoupon = new XpAppUserCoupon();
                    xpAppUserCoupon.setFullMoney(xpCoupon.getConditionalAmount());
                    xpAppUserCoupon.setMoney(xpCoupon.getAmount());
@@ -189,6 +192,7 @@
    /**
     * 是否在运营内
     *
     * @param timeJson 规则json字符串
     * @return
     */
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/UcUserInfo.java
New file
@@ -0,0 +1,24 @@
package com.xiaopeng.api.dto.account;
import lombok.Data;
import java.util.List;
/**
 * 用户中心-用户信息(用于承接 /logan/userResources/getUserListByUids 返回的 data 中每个用户对象)。
 */
@Data
public class UcUserInfo {
    private String appId;
    private String headImg;
    private Long id;
    private String mobile;
    private String nickName;
    private List<String> orderList;
    private Integer orderType;
    private Integer state;
    private Integer type;
    private Long uid;
    private List<String> bindCars; // 空时为 null
    private Integer musicVip;      // 0-非音频会员,1-音频会员
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/UserResourcesClientFallbackFactory.java
@@ -1,32 +1,34 @@
package com.xiaopeng.api.factory.account;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
import com.xiaopeng.api.vo.account.GetUserListByUidsVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class UserResourcesClientFallbackFactory implements FallbackFactory<UserResourcesClient> {
    @Override
    public UserResourcesClient create(Throwable cause) {
        return new UserResourcesClient() {
            @Override
            public UserResourcesDto getUserListByUids(List<Long> uids, Boolean getPreCarOwner) {
            public Map<String, UcUserInfo> getUserListByUids(List<Long> uids, Boolean getPreCarOwner) {
                log.error("获取用户列表失败: {}", cause.getMessage());
                return null;
            }
            @Override
            public UserResourcesDto getBaseUserByUid(String uid) {
            public UcUserInfo getBaseUserByUid(String uid) {
                log.error("获取用户信息失败: {}", cause.getMessage());
                return null;
            }
            @Override
            public UserResourcesDto getUserByMobile(String mobile) {
            public UcUserInfo getUserByMobile(String mobile) {
                log.error("获取用户信息失败: {}", cause.getMessage());
                return null;
            }
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/UserResourcesClient.java
@@ -1,14 +1,14 @@
package com.xiaopeng.api.feignClient.account;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.factory.account.UserResourcesClientFallbackFactory;
import com.xiaopeng.api.vo.account.GetUserListByUidsVo;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
/**
 * 小鹏用户中心---用户信息
@@ -18,25 +18,29 @@
        fallbackFactory = UserResourcesClientFallbackFactory.class)
public interface UserResourcesClient {
    /**
     * 根据uid列表批量查询用户信息 有大小限制最大200个
     * 根据 uid 列表批量查询用户信息(有大小限制)。有大小限制最大200个
     * 返回示例为一个 Map,key 为 uid 字符串,value 为用户信息对象。
     *
     * @param uids           uid 列表
     * @param getPreCarOwner 是否获取前车主信息(可选)
     * @return Map,key 为 uid 字符串,value 为用户信息对象
     */
    @GetMapping("/logan/userResources/getUserListByUids")
    UserResourcesDto getUserListByUids(@RequestParam("uids") List<Long> uids,
                                       @RequestParam(value = "getPreCarOwner", required = false) Boolean getPreCarOwner);
    Map<String, UcUserInfo> getUserListByUids(@RequestParam("uids") List<Long> uids,
                                              @RequestParam(value = "getPreCarOwner", required = false) Boolean getPreCarOwner);
    /**
     * 根据uid获取用户基本信息,不包括预订状态和主使用人身份
     */
    @GetMapping("/logan/userResources/getBaseUserByUid")
    UserResourcesDto getBaseUserByUid(@RequestParam("uid") String uid);
    UcUserInfo getBaseUserByUid(@RequestParam("uid") String uid);
    /**
     * 根据手机号获取用户信息
     */
    @GetMapping("/logan/userResources/getUserByMobile")
    UserResourcesDto getUserByMobile(@RequestParam("mobile") String mobile);
    UcUserInfo getUserByMobile(@RequestParam("mobile") String mobile);
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java
@@ -1,9 +1,8 @@
package com.xiaopeng.operation.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
@@ -114,14 +113,13 @@
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<Boolean> isInWhiteList(HttpServletRequest request) {
        String uid = request.getHeader("XP-Uid");
        UserResourcesDto baseUserByUid = userResourcesClient.getBaseUserByUid(uid);
        if (baseUserByUid!=null) {
        UcUserInfo baseUserByUid = userResourcesClient.getBaseUserByUid(uid);
        if (baseUserByUid != null) {
            try {
                Object data = baseUserByUid.getData();
                String phone = JSONObject.parseObject(data.toString()).getString("mobile");
                String phone = baseUserByUid.getMobile();
                long count = xpWhitelistService.count(new LambdaQueryWrapper<XpWhitelist>().eq(XpWhitelist::getAccount, phone).eq(XpWhitelist::getStatus, 1));
                return R.ok(count>0);
            }catch (Exception e){
                return R.ok(count > 0);
            } catch (Exception e) {
                log.error("获取用户信息失败: {}", e.getMessage());
                return R.ok(false);
            }
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpUserFeedbackServiceImpl.java
@@ -4,11 +4,10 @@
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
import com.xiaopeng.api.model.operation.XpFeedbackType;
import com.xiaopeng.api.model.operation.XpUserFeedback;
import com.xiaopeng.api.vo.account.GetUserListByUidsVo;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.operation.mapper.XpUserFeedbackMapper;
import com.xiaopeng.operation.query.UserFeedBackQuery;
@@ -19,7 +18,6 @@
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.Collections;
@@ -52,15 +50,14 @@
        //获取小鹏用户信息
        List<Long> xpUid = xpUserFeedbackVOS.stream().map(XpUserFeedback::getFeedbackUserId).distinct().collect(Collectors.toList());
        if (CollUtil.isNotEmpty(xpUid)) {
            UserResourcesDto resultData = userResourcesClient.getUserListByUids(xpUid, false);
            if (resultData.getCode().equals(HttpStatus.OK.value())) {
                JSONObject jsonObject = JSONObject.parseObject(resultData.getData().toString());
            Map<String, UcUserInfo> userInfoMap = userResourcesClient.getUserListByUids(xpUid, false);
            if (userInfoMap != null && !userInfoMap.isEmpty()) {
                for (XpUserFeedbackVO xpUserFeedbackVO : xpUserFeedbackVOS) {
                    JSONObject userInfo = jsonObject.getJSONObject(xpUserFeedbackVO.getFeedbackUserId().toString());
                    UcUserInfo userInfo = userInfoMap.get(xpUserFeedbackVO.getFeedbackUserId().toString());
                    if (Objects.nonNull(userInfo)) {
                        xpUserFeedbackVO.setNickname(userInfo.getString("nickName"));
                        xpUserFeedbackVO.setAvatar(userInfo.getString("headImg"));
                        xpUserFeedbackVO.setPhone(userInfo.getString("mobile"));
                        xpUserFeedbackVO.setNickname(userInfo.getNickName());
                        xpUserFeedbackVO.setAvatar(userInfo.getHeadImg());
                        xpUserFeedbackVO.setPhone(userInfo.getMobile());
                    }
                }
            }
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java
@@ -1,22 +1,16 @@
package com.xiaopeng.order.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
import com.xiaopeng.api.feignClient.account.XpAppUserClient;
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.XpAppUser;
import com.xiaopeng.api.model.operation.XpInvitationCode;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.order.XpOrderEvaluate;
import com.xiaopeng.api.vo.account.GetUserListByUidsVo;
import com.xiaopeng.common.core.constant.HttpStatus;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
@@ -33,7 +27,6 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
@@ -110,13 +103,13 @@
        }
        // 4. 批量查询关联数据
        JSONObject jsonObject = batchGetUsers(userIds);
        Map<String, UcUserInfo> userInfoMap = batchGetUsers(userIds);
        Map<Long, XpVehicle> vehicleMap = batchGetVehicles(vehicleIds);
        Map<Long, XpOrder> orderMap = batchGetOrders(orderIds);
        // 5. 根据查询条件过滤(手机号、车牌号)
        List<OrderEvaluatePageVO> voList = evaluatePage.getRecords().stream()
                .map(evaluate -> convertToPageVO(evaluate, jsonObject, vehicleMap, orderMap))
                .map(evaluate -> convertToPageVO(evaluate, userInfoMap, vehicleMap, orderMap))
                .filter(vo -> filterByQuery(vo, query))
                .collect(Collectors.toList());
@@ -135,24 +128,20 @@
            return new PageInfo<>();
        }
        List<Long> userIds = list.stream().map(OrderEvaluateManagementPageListVO::getUserId).collect(Collectors.toList());
        UserResourcesDto userListByUids = userResourcesClient.getUserListByUids(userIds, false);
        Map<String, UcUserInfo> userInfoMap = userResourcesClient.getUserListByUids(userIds, false);
        for (OrderEvaluateManagementPageListVO orderEvaluateManagementPageListVO : list) {
//            Object data = userListByUids.getData();
//            // 转化为jsonArray
//            JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(data));
//            for (Object o : jsonArray) {
//                // 转化为JsonObject
//                JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(o));
//                String mobile = jsonObject.getString("mobile");
//                String nickName = jsonObject.getString("nickName");
//                String headImage = jsonObject.getString("headImage");
//                orderEvaluateManagementPageListVO.setPhoneNumber(mobile);
//                orderEvaluateManagementPageListVO.setNickName(nickName);
//                orderEvaluateManagementPageListVO.setHeadImage(headImage);
//            }
            orderEvaluateManagementPageListVO.setPhoneNumber("19983174515");
            orderEvaluateManagementPageListVO.setNickName("默认用户");
            orderEvaluateManagementPageListVO.setHeadImage("[]");
            if (userInfoMap != null && !userInfoMap.isEmpty()) {
                UcUserInfo userInfo = userInfoMap.get(orderEvaluateManagementPageListVO.getUserId().toString());
                if (userInfo != null) {
                    orderEvaluateManagementPageListVO.setPhoneNumber(userInfo.getMobile());
                    orderEvaluateManagementPageListVO.setNickName(userInfo.getNickName());
                    orderEvaluateManagementPageListVO.setHeadImage(userInfo.getHeadImg());
                }
            } else {
                orderEvaluateManagementPageListVO.setPhoneNumber("19983174515");
                orderEvaluateManagementPageListVO.setNickName("默认用户");
                orderEvaluateManagementPageListVO.setHeadImage("[]");
            }
            systemSettingClient.getFeedbackTypeById(orderEvaluateManagementPageListVO.getFeedbackTypeId());
        }
@@ -163,19 +152,11 @@
    /**
     * 批量获取用户信息
     */
    private JSONObject batchGetUsers(Set<Long> userIds) {
    private Map<String, UcUserInfo> batchGetUsers(Set<Long> userIds) {
        if (CollectionUtils.isEmpty(userIds)) {
            return new JSONObject();
            return new HashMap<>();
        }
        try {
            UserResourcesDto userListByUids = userResourcesClient.getUserListByUids(new ArrayList<>(userIds), false);
            if (userListByUids.getCode().equals(HttpStatus.SUCCESS)) {
                return JSONObject.parseObject(userListByUids.getData().toString());
            }
        } catch (Exception e) {
            log.error("批量获取用户信息失败: {}", e.getMessage());
        }
        return new JSONObject();
        return userResourcesClient.getUserListByUids(new ArrayList<>(userIds), false);
    }
    /**
@@ -213,7 +194,7 @@
     * VO转换
     */
    private OrderEvaluatePageVO convertToPageVO(XpOrderEvaluate evaluate,
                                                JSONObject jsonObject,
                                                Map<String, UcUserInfo> userInfoMap,
                                                Map<Long, XpVehicle> vehicleMap,
                                                Map<Long, XpOrder> orderMap) {
        OrderEvaluatePageVO vo = new OrderEvaluatePageVO();
@@ -225,10 +206,10 @@
        vo.setEvaluateTime(evaluate.getEvaluateTime());
        // 用户信息
        if (Objects.nonNull(evaluate.getAppUserId()) && jsonObject.containsKey(evaluate.getAppUserId().toString())) {
            JSONObject userInfo = jsonObject.getJSONObject(evaluate.getAppUserId().toString());
            vo.setNickName(userInfo.getString("nickName"));
            vo.setPhoneNumber(userInfo.getString("mobile"));
        if (Objects.nonNull(evaluate.getAppUserId()) && userInfoMap.containsKey(evaluate.getAppUserId().toString())) {
            UcUserInfo userInfo = userInfoMap.get(evaluate.getAppUserId().toString());
            vo.setNickName(userInfo.getNickName());
            vo.setPhoneNumber(userInfo.getMobile());
        }
        // 车辆信息
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -1,18 +1,19 @@
package com.xiaopeng.order.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.ImmutableMap;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.account.UcUserInfo;
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.dto.account.UserResourcesDto;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.order.GetOrderNumDto;
@@ -25,7 +26,6 @@
import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.feignClient.account.UserResourcesClient;
import com.xiaopeng.api.feignClient.account.XpAppUserClient;
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient;
@@ -33,20 +33,17 @@
import com.xiaopeng.api.feignClient.operation.XpPointClient;
import com.xiaopeng.api.feignClient.operation.XpPricingClient;
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.XpAppUser;
import com.xiaopeng.api.model.maintenance.XpTaskRule;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.model.order.*;
import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.OrderType;
import com.xiaopeng.api.vo.account.GetUserListByUidsVo;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperationType;
@@ -89,13 +86,10 @@
import com.xiaopeng.order.service.IXpOrderReassignService;
import com.xiaopeng.order.service.IXpOrderService;
import com.xiaopeng.order.utils.TaxiPricingDemoService;
import com.xiaopeng.order.utils.TrajectoryGenerator;
import com.xiaopeng.order.utils.holiday.HolidayUtil;
import com.xiaopeng.order.vo.OrderDetailVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
@@ -103,7 +97,6 @@
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -222,13 +215,13 @@
        }
        // 4. 批量查询关联数据
        JSONObject jsonObject = batchGetUsers(userIds);
        Map<String, UcUserInfo> userInfoMap = batchGetUsers(userIds);
        Map<Long, XpVehicle> vehicleMap = batchGetVehicles(vehicleIds);
        Map<Long, XpFleet> fleetMap = batchGetFleets(fleetIds);
        // 5. 组装 VO
        List<XpOrderPageVO> voList = pageResult.getRecords().stream()
                .map(order -> convertToPageVO(order, jsonObject, vehicleMap, fleetMap))
                .map(order -> convertToPageVO(order, userInfoMap, vehicleMap, fleetMap))
                .collect(Collectors.toList());
        // 6. 返回分页结果
@@ -251,11 +244,13 @@
        // 3. 获取用户信息
        if (Objects.nonNull(order.getAppUserId())) {
            JSONObject jsonObject = batchGetUsers(Collections.singleton(order.getAppUserId()));
            JSONObject userInfo = jsonObject.getJSONObject(order.getAppUserId().toString());
            if (Objects.nonNull(userInfo)) {
                vo.setNickName(userInfo.getString("nickName"));
                vo.setPhoneNumber(userInfo.getString("mobile"));
            Map<String, UcUserInfo> userInfoMap = batchGetUsers(Collections.singleton(order.getAppUserId()));
            if (CollUtil.isNotEmpty(userInfoMap)) {
                UcUserInfo userInfo = userInfoMap.get(order.getAppUserId());
                if (Objects.nonNull(userInfo)) {
                    vo.setNickName(userInfo.getNickName());
                    vo.setPhoneNumber(userInfo.getMobile());
                }
            }
        }
@@ -330,13 +325,13 @@
        }
        // 4. 批量查询关联数据
        JSONObject jsonObject = batchGetUsers(userIds);
        Map<String, UcUserInfo> userInfoMap = batchGetUsers(userIds);
        Map<Long, XpVehicle> vehicleMap = batchGetVehicles(vehicleIds);
        Map<Long, XpFleet> fleetMap = batchGetFleets(fleetIds);
        // 5. 组装 VO
        return orderList.stream()
                .map(order -> convertToPageVO(order, jsonObject, vehicleMap, fleetMap))
                .map(order -> convertToPageVO(order, userInfoMap, vehicleMap, fleetMap))
                .collect(Collectors.toList());
    }
@@ -365,22 +360,11 @@
    /**
     * 批量获取用户信息
     */
    private JSONObject batchGetUsers(Set<Long> userIds) {
    private Map<String, UcUserInfo> batchGetUsers(Set<Long> userIds) {
        if (CollectionUtils.isEmpty(userIds)) {
            return new JSONObject();
            return new HashMap<>();
        }
        try {
            GetUserListByUidsVo getUserListByUidsVo = new GetUserListByUidsVo();
            getUserListByUidsVo.setUids(new ArrayList<>(userIds));
            getUserListByUidsVo.setGetPreCarOwner(Boolean.TRUE);
            UserResourcesDto userListByUids = userResourcesClient.getUserListByUids(getUserListByUidsVo);
            if (userListByUids.getCode().equals(HttpStatus.SUCCESS)) {
                return JSONObject.parseObject(userListByUids.getData().toString());
            }
        } catch (Exception e) {
            log.error("批量获取用户信息失败: {}", e.getMessage());
        }
        return new JSONObject();
        return userResourcesClient.getUserListByUids(new ArrayList<>(userIds), false);
    }
    /**
@@ -464,7 +448,7 @@
     * 转换为分页列表 VO
     */
    private XpOrderPageVO convertToPageVO(XpOrder order,
                                          JSONObject jsonObject,
                                          Map<String, UcUserInfo> userInfoMap,
                                          Map<Long, XpVehicle> vehicleMap,
                                          Map<Long, XpFleet> fleetMap) {
        XpOrderPageVO vo = new XpOrderPageVO();
@@ -479,10 +463,10 @@
        vo.setStatus(order.getStatus());
        // 用户信息
        if (Objects.nonNull(order.getAppUserId()) && jsonObject.containsKey(order.getAppUserId().toString())) {
            JSONObject userInfo = jsonObject.getJSONObject(order.getAppUserId().toString());
            vo.setNickName(userInfo.getString("nickName"));
            vo.setPhoneNumber(userInfo.getString("mobile"));
        if (Objects.nonNull(order.getAppUserId()) && userInfoMap.containsKey(order.getAppUserId().toString())) {
            UcUserInfo userInfo = userInfoMap.get(order.getAppUserId().toString());
            vo.setNickName(userInfo.getNickName());
            vo.setPhoneNumber(userInfo.getMobile());
        }
        // 车辆信息
@@ -862,13 +846,13 @@
            // 保留2位数小数
            Double distance = datum.getDistance();
            datum.setDistance(BigDecimal.valueOf(distance).setScale(2, RoundingMode.HALF_UP).doubleValue());
            xpOrders.stream().filter(e->e.getStartPointId().equals(datum.getId())).findFirst().ifPresent(
                    order->{
            xpOrders.stream().filter(e -> e.getStartPointId().equals(datum.getId())).findFirst().ifPresent(
                    order -> {
                        datum.setNum(order.getNum());
                    }
            );
        }
        data =  data.stream().sorted(Comparator.comparingInt(XpHistoryStartPointsVo::getNum).reversed()).collect(Collectors.toList());
        data = data.stream().sorted(Comparator.comparingInt(XpHistoryStartPointsVo::getNum).reversed()).collect(Collectors.toList());
        return data;
@@ -893,13 +877,13 @@
            // 保留2位数小数
            Double distance = datum.getDistance();
            datum.setDistance(BigDecimal.valueOf(distance).setScale(2, RoundingMode.HALF_UP).doubleValue());
            xpOrders.stream().filter(e->e.getEndPointId().equals(datum.getId())).findFirst().ifPresent(
                    order->{
            xpOrders.stream().filter(e -> e.getEndPointId().equals(datum.getId())).findFirst().ifPresent(
                    order -> {
                        datum.setNum(order.getNum());
                    }
            );
        }
        data =  data.stream().sorted(Comparator.comparingInt(XpHistoryEndPointsVo::getNum).reversed()).collect(Collectors.toList());
        data = data.stream().sorted(Comparator.comparingInt(XpHistoryEndPointsVo::getNum).reversed()).collect(Collectors.toList());
        return data;
@@ -917,7 +901,7 @@
        Page<XpOrderHistoryListVO> page = new Page<>(query.getPageNum(), query.getPageSize());
        List<XpOrderHistoryListVO> list = this.baseMapper.getHistoryOrderList(page, query, Long.parseLong(uid));
        XpOrderHistoryVO xpOrderHistoryVO = new XpOrderHistoryVO();
        if(list.isEmpty()){
        if (list.isEmpty()) {
            return xpOrderHistoryVO;
        }
@@ -941,7 +925,7 @@
            for (XpOrderHistoryListVO xpOrderHistoryListVO : value) {
                XpPoint xpPoint = pointList.stream().filter(e -> e.getId().equals(xpOrderHistoryListVO.getStartPointId())).findFirst().orElse(null);
                if(xpPoint!=null){
                if (xpPoint != null) {
                    xpOrderHistoryListVO.setStartPointName(xpPoint.getPointName());
                    xpOrderHistoryListVO.setStartLat(xpPoint.getPointLat());
                    xpOrderHistoryListVO.setStartLon(xpPoint.getPointLon());
@@ -950,7 +934,7 @@
                }
                xpPoint = pointList.stream().filter(e -> e.getId().equals(xpOrderHistoryListVO.getEndPointId())).findFirst().orElse(null);
                if(xpPoint!=null){
                if (xpPoint != null) {
                    xpOrderHistoryListVO.setEndPointName(xpPoint.getPointName());
                    xpOrderHistoryListVO.setEndLat(xpPoint.getPointLat());
                    xpOrderHistoryListVO.setEndLon(xpPoint.getPointLon());
@@ -980,15 +964,15 @@
    public void cancelOrder(Long orderId, String uid) {
        XpOrder order = this.getById(orderId);
        if (order == null) {
            throw new ServiceException("订单不存在",I18nKeyConstant.ORDER_NOT_EXISTS);
            throw new ServiceException("订单不存在", I18nKeyConstant.ORDER_NOT_EXISTS);
        }
        if (!order.getAppUserId().toString().equals(uid)) {
            throw new ServiceException("订单不存在",I18nKeyConstant.ORDER_NOT_EXISTS);
            throw new ServiceException("订单不存在", I18nKeyConstant.ORDER_NOT_EXISTS);
        }
        if (order.getStatus() > 5 || order.getStatus() < 1) {
            throw new ServiceException("订单状态错误",I18nKeyConstant.ORDER_STATUS_ERROR);
            throw new ServiceException("订单状态错误", I18nKeyConstant.ORDER_STATUS_ERROR);
        }
        if(order.getStatus()==1){
        if (order.getStatus() == 1) {
            order.setStatus(0);
            order.setAppUserId(null);
            baseMapper.updateById(order);
@@ -1002,7 +986,7 @@
        R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(vehicleId);
        XpVehicle xpVehicle = xpVehicleR.getData();
        if (xpVehicle == null) {
            throw new ServiceException("车辆不存在",I18nKeyConstant.VEHICLE_NOT_EXISTS);
            throw new ServiceException("车辆不存在", I18nKeyConstant.VEHICLE_NOT_EXISTS);
        }
        cancelTaxiPassengerVo.setVin(xpVehicle.getVehicleVin());
        cancelTaxiPassengerVo.setUid(order.getAppUserId().toString());
@@ -1011,7 +995,7 @@
        cancelTaxiPassengerVo.setAppId("");
        BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
        if (baseVehicleUserDto==null) {
        if (baseVehicleUserDto == null) {
            // TODO 本地无法调通
//            throw new RuntimeException("取消订单失败");
        }
@@ -1035,7 +1019,7 @@
        }
        // 下发命令
        if(order.getStatus()>1){
        if (order.getStatus() > 1) {
            PushOrderDto pushOrderDto = new PushOrderDto();
            pushOrderDto.setOrderId(order.getId().toString());
            pushOrderDto.setVin(xpVehicle.getVehicleVin());
@@ -1050,7 +1034,7 @@
    public void cancelOrder(String orderId) {
        XpOrder order = this.getById(orderId);
        if (order == null) {
            throw new ServiceException("订单不存在",I18nKeyConstant.ORDER_NOT_EXISTS);
            throw new ServiceException("订单不存在", I18nKeyConstant.ORDER_NOT_EXISTS);
        }
        order.setStatus(0);
        order.setAppUserId(null);
@@ -1084,7 +1068,7 @@
        log.info("订单取消消息推送完毕");
        // 下发命令
        if(order.getStatus()>1){
        if (order.getStatus() > 1) {
            PushOrderDto pushOrderDto = new PushOrderDto();
            pushOrderDto.setOrderId(order.getId().toString());
            pushOrderDto.setVin(xpVehicle.getVehicleVin());
@@ -1105,13 +1089,13 @@
    public void comment(XpOrderCommentDto dto, String uid) {
        XpOrder xpOrder = this.getById(dto.getOrderId());
        if (xpOrder == null) {
            throw new ServiceException("订单不存在",I18nKeyConstant.ORDER_NOT_EXISTS);
            throw new ServiceException("订单不存在", I18nKeyConstant.ORDER_NOT_EXISTS);
        }
        if (!xpOrder.getAppUserId().toString().equals(uid)) {
            throw new ServiceException("订单不存在",I18nKeyConstant.ORDER_NOT_EXISTS);
            throw new ServiceException("订单不存在", I18nKeyConstant.ORDER_NOT_EXISTS);
        }
        if (xpOrder.getStatus() != 9) {
            throw new ServiceException("订单状态错误",I18nKeyConstant.ORDER_STATUS_ERROR);
            throw new ServiceException("订单状态错误", I18nKeyConstant.ORDER_STATUS_ERROR);
        }
        xpOrder.setAppUserId(null);
        xpOrder.setStatus(10);
@@ -1232,7 +1216,6 @@
        }
        // 根据订单所属开通城市id 查询定价
        R<XpPricing> pricingByCityId = xpPricingClient.getPricingByCid(order.getCityId());
        XpPricing pricing = pricingByCityId.getData();
@@ -1251,13 +1234,13 @@
//            TaxiPricingDemoService.GpsPoint point = new TaxiPricingDemoService.GpsPoint(trajectory.getDistance(), trajectory.getLocatetime());
//            gpsPoints.add(point);
//        }
    // 补充临时轨迹数据
        // 补充临时轨迹数据
        List<TaxiPricingDemoService.GpsPoint> gpsPoints = TaxiPricingDemoService.createMockGpsPoints(DateUtils.toDate(order.getCreateTime()));
        TaxiPricingDemoService.PricingConfig config = new TaxiPricingDemoService.PricingConfig();
        JSONArray startingFareJsonArray = JSONArray.parseArray(pricing.getStartingFareJson());
        if(pricing.getPricingType()==1){
        if (pricing.getPricingType() == 1) {
            JSONObject basicPricingJson = JSONObject.parseObject(pricing.getBasicPricingJson());
            config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num21").split(" - ")[0], basicPricingJson.getString("num21").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25")), Double.parseDouble(basicPricingJson.getString("num26")), Double.parseDouble(basicPricingJson.getString("num27")), Double.parseDouble(basicPricingJson.getString("num28"))));
            config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num22").split(" - ")[0], basicPricingJson.getString("num22").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25")), Double.parseDouble(basicPricingJson.getString("num26")), Double.parseDouble(basicPricingJson.getString("num27")), Double.parseDouble(basicPricingJson.getString("num28"))));
@@ -1292,7 +1275,7 @@
        System.err.println("--------------------------");
        System.err.println("应付总额: " + totalAmount + " 元");
        BigDecimal startMoney = BigDecimal.ZERO;
         // 默认费率1
        // 默认费率1
        double priceRate = 1;
        if (pricing.getIsDynamicPrice() == 1) {
            // 先判断是否已经调价过了
@@ -1440,11 +1423,11 @@
            xpOrderDetailMapper.insert(xpOrderDetail);
        }
        for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
            if (xpOrderDetail.getDetailType() == 1){
            if (xpOrderDetail.getDetailType() == 1) {
                order.setDurationType(xpOrderDetail.getType());
                order.setDurationMoney(xpOrderDetail.getMoney());
                order.setDuration(Double.parseDouble(xpOrderDetail.getDuration() + ""));
            }else{
            } else {
                order.setLongDistanceType(order.getDurationType());
                order.setLongDistance(xpOrderDetail.getMileage().doubleValue());
                order.setLongDistancemoney(xpOrderDetail.getMoney());
@@ -1454,7 +1437,7 @@
        BigDecimal orderMoney = startMoney.add(mileageMoney).add(order.getDurationMoney() != null ? order.getDurationMoney() : BigDecimal.ZERO)
                .add(order.getLongDistancemoney() != null ? order.getLongDistancemoney() : BigDecimal.ZERO)
                .add(order.getWaitMoney()!=null?order.getWaitMoney():BigDecimal.ZERO);
                .add(order.getWaitMoney() != null ? order.getWaitMoney() : BigDecimal.ZERO);
        order.setOrderMoney(orderMoney);
        order.setAppUserId(null);
        baseMapper.updateById(order);
@@ -1467,7 +1450,7 @@
            useUserCouponDto.setUserCouponId(order.getCouponId());
            xpAppUserCouponClient.useUserCoupon(useUserCouponDto);
        }
       // 计算完价格后 挑选优惠券
        // 计算完价格后 挑选优惠券
        GetUserCouponDto getUserCouponDto = new GetUserCouponDto();
        getUserCouponDto.setUserId(Long.valueOf(uid));
        getUserCouponDto.setTotalAmount(order.getOrderMoney().doubleValue());
@@ -1481,16 +1464,13 @@
        baseMapper.updateById(order);
        // 结束后的车辆操作
        if(vehicle!=null){
        if (vehicle != null) {
            // 修改车辆状态
            vehicle.setState(0);
            addCruiseMission(vehicle,order);
            addCruiseMission(vehicle, order);
//            // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作
//            R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail();
//            XpTaskRule xpTaskRule = xpTaskRuleR.getData();
@@ -1569,19 +1549,20 @@
    /**
     * 添加巡游任务下发命令
     *
     * @param vehicle
     * @param order
     */
    public void addCruiseMission(XpVehicle vehicle, XpOrder order) {
        if(vehicle.getState()!=0 || vehicle.getOperatingStatus()!=1){
        if (vehicle.getState() != 0 || vehicle.getOperatingStatus() != 1) {
            return;
        }
        // 判断是否有计划
        R<XpCruisePlanVehicle> xpCruisePlanR = xpCruisePlanClient.getCruisePlan(vehicle.getId());
        if(xpCruisePlanR==null || xpCruisePlanR.getData()==null){
        if (xpCruisePlanR == null || xpCruisePlanR.getData() == null) {
            return;
        }
@@ -1591,11 +1572,11 @@
        // 生成新的巡游单子 回到最新巡游的初始起点位置
        XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
        int temp=0;
        if(xpCruiseOrders==null){
            temp=1;
        int temp = 0;
        if (xpCruiseOrders == null) {
            temp = 1;
            //特殊情况 可能没有产生终止的订单  (到站点就被正常接单了)所以找正常订单
            xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
            xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1"));
        }
        XpCruiseOrder xpCruiseOrder = new XpCruiseOrder();
        xpCruiseOrder.setVehicleId(vehicle.getId());
@@ -1609,12 +1590,12 @@
        xpCruiseOrder.setStartLat(order.getEndLat());
        // 完成的直接走终点   终止的走起点
        if(temp==0){
        if (temp == 0) {
            xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId());
            xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName());
            xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon());
            xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat());
        }else {
        } else {
            xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId());
            xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName());
            xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon());
@@ -1625,7 +1606,7 @@
        xpCruiseOrder.setStatus(0);
        xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
        xpCruiseOrder.setCreateTime(LocalDateTime.now());
        xpCruiseOrder.setId("XU"+ IdUtil.fastUUID());
        xpCruiseOrder.setId("XU" + IdUtil.fastUUID());
        // 判断当前时分秒是否大于收车时间
        LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
@@ -1876,14 +1857,14 @@
            detail.setTime(xpOrderDetail.getTime());
            detail.setMileage(xpOrderDetail.getMileage());
            detail.setDuration(xpOrderDetail.getDuration());
            if (xpOrderDetail.getDetailType() == 1){
            if (xpOrderDetail.getDetailType() == 1) {
                start.add(detail);
            }else{
            } else {
                mileage.add(detail);
            }
        }
        List<FareBreakdownDetailVo> duration = new ArrayList<>();
        if (order.getDuration()!=null&&order.getDuration()>0){
        if (order.getDuration() != null && order.getDuration() > 0) {
            FareBreakdownDetailVo durationDetail = new FareBreakdownDetailVo();
            durationDetail.setType(order.getDurationType());
            durationDetail.setDuration(order.getDuration());
@@ -1892,24 +1873,24 @@
        }
        List<FareBreakdownDetailVo> longDistance = new ArrayList<>();
        if (order.getLongDistance()!=null&&order.getLongDistance()>0){
        if (order.getLongDistance() != null && order.getLongDistance() > 0) {
            FareBreakdownDetailVo longDistanceDetail = new FareBreakdownDetailVo();
            longDistanceDetail.setType(order.getLongDistanceType());
            longDistanceDetail.setMileage(BigDecimal.valueOf(order.getLongDistance()));
            longDistanceDetail.setMoney(order.getLongDistancemoney());
            longDistance.add(longDistanceDetail);
        }
        res.setStart( start);
        res.setMileage( mileage);
        res.setDuration( duration);
        res.setLongDistance( longDistance);
        res.setStart(start);
        res.setMileage(mileage);
        res.setDuration(duration);
        res.setLongDistance(longDistance);
        res.setRedPacketMoney(order.getRedPacketMoney());
        res.setCouponMoney(order.getCouponMoney());
        res.setOrderMoney(order.getOrderMoney());
        res.setKilometer(order.getMileageKilometers()==null?BigDecimal.ZERO:BigDecimal.valueOf(order.getMileageKilometers()));
        res.setKilometer(order.getMileageKilometers() == null ? BigDecimal.ZERO : BigDecimal.valueOf(order.getMileageKilometers()));
        LocalDateTime createTime = order.getCreateTime();
        LocalDateTime tripEnd = order.getTripEnd();
        if (tripEnd==null){
        if (tripEnd == null) {
            tripEnd = LocalDateTime.now();
            order.setTripEnd(tripEnd);
            this.updateById(order);
@@ -2060,7 +2041,7 @@
        XpPricing pricing = pricingByCityId.getData();
        if (pricing == null) {
            throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
        }else{
        } else {
            return R.ok(pricing.getPriceRule());
        }
    }
@@ -2072,15 +2053,15 @@
     * @param dto
     */
    @Override
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
//    @Transactional
//    @ShardingSphereTransactionType(TransactionType.BASE)
    public void popOrder(PopOrderDto dto) {
        String orderType = dto.getOrderType();
        Long orderId = dto.getOrderId();
        //巡游单处理逻辑
        if(OrderType.CRUISE_ORDER.equals(orderType)){
        if (OrderType.CRUISE_ORDER.equals(orderType)) {
            XpCruiseOrder xpCruiseOrder = xpCruiseOrderMapper.selectById(orderId);
            if(xpCruiseOrder!=null){
            if (xpCruiseOrder != null) {
                xpCruiseOrder.setStatus(1);
                xpCruiseOrderMapper.updateById(xpCruiseOrder);
            }
@@ -2088,11 +2069,11 @@
        }
        //乘客单处理逻辑
        if(OrderType.USER_ORDER.equals(orderType)){
        if (OrderType.USER_ORDER.equals(orderType)) {
            XpOrder order = this.getById(orderId);
            Long appUserId = order.getAppUserId();
            //订单为待接单状态
            if(order.getStatus() < 4){
            if (order.getStatus() < 4) {
                AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
                order.setAcceptanceTime(LocalDateTime.now());
                R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
@@ -2130,7 +2111,7 @@
                userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
                //推送乘客车辆到达预约点的导航数据
                sendRoute(addTaxiPassengerVo.getUid(), orderId, "ORDER_NAVIGATION_START_DATA", dto.getXpVehicleVin());
            }else{
            } else {
                //推送行起点到终点的驶轨迹给乘客端
                sendRoute(appUserId.toString(), orderId, "ORDER_NAVIGATION_END_DATA", dto.getXpVehicleVin());
            }
@@ -2140,13 +2121,14 @@
    /**
     * 发送乘客导航路径数据
     *
     * @param appUserId
     * @param keyStr
     */
    public void sendRoute(String appUserId, Long orderId, String keyStr, String vin){
    public void sendRoute(String appUserId, Long orderId, String keyStr, String vin) {
        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class);
        Object cacheObject = redisService.getCacheObject(keyStr + ":" + appUserId);
        if(null != cacheObject){
        if (null != cacheObject) {
            RouteVo routeVo = JSON.parseObject(cacheObject.toString(), RouteVo.class);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("type", "ORDER_ROUTE");
@@ -2160,7 +2142,7 @@
            route.put("duration", routeVo.getDuration());
            route.put("routeID", routeVo.getRouteID());
            List<JSONObject> collect = routeVo.getPolyline().stream().map(item->{
            List<JSONObject> collect = routeVo.getPolyline().stream().map(item -> {
                JSONObject point = new JSONObject();
                point.put("latitude", item.getLatitude());
                point.put("longitude", item.getLongitude());
@@ -2179,8 +2161,6 @@
    }
    /**
     * 获取当前用户正在执行的订单
     *
@@ -2190,7 +2170,7 @@
    @Override
    public XpOrderDetailVO getActiveOrder(String uid) {
        XpOrderDetailVO xpOrderDetailVO = new XpOrderDetailVO();
        XpOrder xpOrder = this.baseMapper.selectOne(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.parseLong(uid)).in(XpOrder::getStatus, Arrays.asList(1,2,3, 4, 5, 6, 7, 8)).orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
        XpOrder xpOrder = this.baseMapper.selectOne(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.parseLong(uid)).in(XpOrder::getStatus, Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8)).orderByDesc(BaseModel::getCreateTime).last("LIMIT 1"));
        if (xpOrder == null) {
            return null;
        }
@@ -2218,7 +2198,7 @@
        }
        if(xpOrder.getVehicleId()!=null){
        if (xpOrder.getVehicleId() != null) {
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            xpOrderDetailVO.setPlateNumber(xpVehicleR.getData().getPlateNumber());
        }