liujie
2026-02-28 eeb59ccbd9d5e9aa2461c7a5d61690ae14352996
修改bug
12个文件已修改
158 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpRegion.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpHistoryEndPointsVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpHistoryStartPointsVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpRegionController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/mapper/XpOrderMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/resources/mapper/order/XpOrderMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
@@ -354,7 +354,10 @@
                }
                // 角色名称匹配
                for (ExportOperationsUserVo xpOperationsUserVO : list) {
                    xpOperationsUserVO.setRoleName(map.get(xpOperationsUserVO.getId()).stream().map(SysRole::getRoleName).collect(Collectors.joining(";")));
                    List<SysRole> sysRoles1 = map.get(xpOperationsUserVO.getId());
                    if(null != sysRoles1){
                        xpOperationsUserVO.setRoleName(sysRoles1.stream().map(SysRole::getRoleName).collect(Collectors.joining(";")));
                    }
                }
            }
        }
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml
@@ -52,11 +52,27 @@
    <select id="exportOperationsUser" resultType="com.xiaopeng.api.vo.account.ExportOperationsUserVo">
        SELECT xou.id, xou.nick_name, xou.unique_number, xou.avatar, xou.password, xou.phone_number, xou.remarks, xou.status,
        xou.id_card_front, xou.id_card_back, xou.driver_license, xou.certificate_of_no_criminal_record,
        xou.training_graduation_certificate, xou.is_deleted, xou.create_time, xou.update_time, xou.create_by
        from xp_operations_user xou
        left join xp_operations_role xor on xou.id = xor.operations_user_id
        SELECT
        xou.id,
        xou.nick_name,
        xou.unique_number,
        xou.avatar,
        xou.`password`,
        xou.phone_number,
        xou.remarks,
        xou.`status`,
        xou.id_card_front,
        xou.id_card_back,
        xou.driver_license,
        xou.certificate_of_no_criminal_record,
        xou.training_graduation_certificate,
        xou.is_deleted,
        xou.create_time,
        xou.update_time,
        xou.create_by
        FROM
        xp_operations_user xou
        LEFT JOIN xp_operations_role a ON xou.id = a.operations_user_id
        <where>
            <if test="query.nickName != null and query.nickName != ''">
                and xou.nick_name like concat('%',#{query.nickName},'%')
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpRegion.java
@@ -64,5 +64,7 @@
    private Integer isOpen=0;
    private String china;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java
@@ -223,4 +223,8 @@
    @ApiModelProperty(value = "队列名称")
    @TableField("queue_name")
    private String queueName;
    // 用于计数
    @TableField(exist = false)
    private Integer num;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpHistoryEndPointsVo.java
@@ -31,4 +31,7 @@
    private Long electronicAreaId;
    private Integer num;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpHistoryStartPointsVo.java
@@ -31,4 +31,6 @@
    private Long electronicAreaId;
    private Integer num;
}
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -203,10 +203,9 @@
        }
//        // 算距离
        R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
        if(distanceAndDuration.getCode()!=200){
        if (distanceAndDuration.getCode() != 200) {
            throw new ServiceException("未找到路径", I18nKeyConstant.PATH_NOT_FOUND);
        }
@@ -226,7 +225,7 @@
            xpPricingCardVo = xpPricingUtil.calculationFixedPrice(userId,
                    JSON.parseObject(xpPricing.getBasicPricingJson()),
                    JSON.parseArray(xpPricing.getStartingFareJson()),
                    routeVo.getDistance(), routeVo.getDuration(),0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson()
                    routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson()
            );
        }
@@ -244,7 +243,7 @@
                () -> {
                    // 优惠券
                    return xpAppUserCouponClient.getUserCoupon(
                                new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(),routeAndFareDto.getOpenCityId())
                            new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId())
//                            new GetUserCouponDto(Long.valueOf(userId), 1d, routeAndFareDto.getOpenCityId())
                    );
                },
@@ -289,7 +288,7 @@
        if (userCouponVo != null) {
            Double money = userCouponVo.getMoney();
            xpPricingCardVo.setCoupon(String.valueOf(userCouponVo.getMoney()));
            if(xpPricingCardVo.getTotalPrice()> money){
            if (xpPricingCardVo.getTotalPrice() > money) {
                xpPricingCardVo.setSystemDiscount(xpPricingCardVo.getTotalPrice() - money);
            }
@@ -557,7 +556,7 @@
            throw new ServiceException("订单生成失败", I18nKeyConstant.ORDER_CREATE_FAIL);
        }
        Long orderId = addOrderR.getData();
        xpOrder.setId(orderId);
        // 静默处理 不推单
        if (isSilent) {
            // todo 用于测试流程,正式联调需要删除此代码
@@ -684,11 +683,11 @@
     * 测试阶段用于自动完成小程序的整个流程数据状态流转
     * @param orderId
     */
    public void testOrder(Long orderId, Integer status){
    public void testOrder(Long orderId, Integer status) {
        XpOrder xpOrder = xpOrderClient.queryOrderById(orderId).getData();
        Long appUserId = xpOrder.getAppUserId();
        if(2 == status){
            if(xpOrder.getStatus() == 0){
        if (2 == status) {
            if (xpOrder.getStatus() == 0) {
                return;
            }
            xpOrder.setAppUserId(null);
@@ -697,10 +696,10 @@
            xpOrder.setFleetId(2L);
            xpOrderClient.updateOrder(xpOrder);
        }
        if(3 == status){
        if (3 == status) {
            //修改状态为接驾中
            xpOrder = xpOrderClient.queryOrderById(orderId).getData();
            if(xpOrder.getStatus() == 0){
            if (xpOrder.getStatus() == 0) {
                return;
            }
            xpOrder.setAppUserId(null);
@@ -739,7 +738,7 @@
            route.put("duration", routeVo.getDuration());
            route.put("routeID", routeVo.getRouteID());
            List<com.alibaba.fastjson2.JSONObject> collect = routeVo.getPolyline().stream().map(item->{
            List<com.alibaba.fastjson2.JSONObject> collect = routeVo.getPolyline().stream().map(item -> {
                com.alibaba.fastjson2.JSONObject point = new com.alibaba.fastjson2.JSONObject();
                point.put("latitude", item.getLatitude());
                point.put("longitude", item.getLongitude());
@@ -754,10 +753,10 @@
            messageDTO.setMessage(jsonObject.toJSONString());
            xpPushMessageClient.sendRoute(messageDTO);
        }
        if(4 == status){
        if (4 == status) {
            //司机到达起点
            xpOrder = xpOrderClient.queryOrderById(orderId).getData();
            if(xpOrder.getStatus() == 0){
            if (xpOrder.getStatus() == 0) {
                return;
            }
            xpOrder.setAppUserId(null);
@@ -772,10 +771,10 @@
            dto.setMessage("{\"type\":\"VEHICLE_LOCATION\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"lon\\\":" + xpOrder.getStartLon() + ",\\\"lat\\\":" + xpOrder.getStartLat() + "}\",\"timestamp\":\"176569945845456\"}");
            xpPushMessageClient.sendVehicleLocation(dto);
        }
        if(5 == status){
        if (5 == status) {
            //乘客上车
            xpOrder = xpOrderClient.queryOrderById(orderId).getData();
            if(xpOrder.getStatus() == 0){
            if (xpOrder.getStatus() == 0) {
                return;
            }
            xpOrder.setAppUserId(null);
@@ -806,7 +805,7 @@
            route.put("distance", routeVo.getDistance());
            route.put("duration", routeVo.getDuration());
            route.put("routeID", routeVo.getRouteID());
            List<com.alibaba.fastjson2.JSONObject> collect = routeVo.getPolyline().stream().map(item->{
            List<com.alibaba.fastjson2.JSONObject> collect = routeVo.getPolyline().stream().map(item -> {
                com.alibaba.fastjson2.JSONObject point = new com.alibaba.fastjson2.JSONObject();
                point.put("latitude", item.getLatitude());
                point.put("longitude", item.getLongitude());
@@ -820,7 +819,7 @@
            messageDTO.setMessage(jsonObject.toJSONString());
            xpPushMessageClient.sendRoute(messageDTO);
        }
        if(6 == status){
        if (6 == status) {
            //开始服务中
            xpOrder.setAppUserId(null);
            xpOrder.setStatus(6);
@@ -832,7 +831,7 @@
            xpPushMessageClient.sendStatus(dto);
        }
        if(7 == status){
        if (7 == status) {
            //乘客待下车
            xpOrder.setAppUserId(null);
            xpOrder.setStatus(7);
@@ -878,7 +877,7 @@
//            xpOrder
        if(8 == status){
        if (8 == status) {
            //乘客待支付
            xpOrder.setAppUserId(null);
            xpOrder.setStatus(8);
@@ -889,7 +888,7 @@
            xpPushMessageClient.sendStatus(dto);
        }
        if(9 == status){
        if (9 == status) {
            //乘客支付成功
            xpOrder.setAppUserId(null);
            xpOrder.setStatus(9);
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpRegionController.java
@@ -74,15 +74,12 @@
                        .map(item -> (XpRegion) item)
                        .collect(Collectors.toList());
                if(query.getCityName()!=null){
                    list = list.stream().filter(item -> item.getName().contains(query.getCityName()) || item.getInitial().contains(query.getCityName())).collect(Collectors.toList());
                }
            } catch (ClassCastException e) {
                // 缓存数据结构异常,重新加载
                redisService.deleteObject(CacheConstants.XP_REGION);
            }
        }else {
            list = regionService.list(Wrappers.lambdaQuery(XpRegion.class).ne(XpRegion::getParentId, 0).and(w->w.like(query.getCityName()!=null , XpRegion::getInitial, query.getCityName()).or().like(query.getCityName()!=null , XpRegion::getInitial, query.getCityName())).like(query.getCityName()!=null , XpRegion::getName, query.getCityName()).isNotNull(XpRegion::getInitial).orderByAsc(XpRegion::getInitial));
            list = regionService.list(Wrappers.lambdaQuery(XpRegion.class).ne(XpRegion::getParentId, 0).isNotNull(XpRegion::getInitial).orderByAsc(XpRegion::getInitial));
            redisService.setCacheList(CacheConstants.XP_REGION_CITY, list);
        }
        List<XpOpenCity> openCities = openCityService.list(new LambdaQueryWrapper<XpOpenCity>().eq(XpOpenCity::getStatus,1));
@@ -96,7 +93,7 @@
        }
        if (query.getCityName() != null) {
            list = list.stream().filter(item -> item.getName().contains(query.getCityName())).collect(Collectors.toList());
            list = list.stream().filter(item -> item.getName().contains(query.getCityName()) || item.getInitial().equals(query.getCityName()) || item.getChina().contains(query.getCityName().toLowerCase())).collect(Collectors.toList());
        }
        if (query.getIsOpen() != null) {
            list = list.stream().filter(item -> item.getIsOpen().equals(query.getIsOpen())).collect(Collectors.toList());
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -140,6 +140,7 @@
     */
    @PostMapping("/inner/order/updateOrder")
    public R<?> updateOrder(@RequestBody XpOrder xpOrder){
        xpOrder.setAppUserId(null);
        return xpOrderService.updateById(xpOrder)?R.ok():R.fail();
    }
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/mapper/XpOrderMapper.java
@@ -63,4 +63,11 @@
     * @return
     */
    List<XpOrderHistoryListVO> getHistoryOrderList(@Param("page") Page<XpOrderHistoryListVO> page, @Param("query") XpHistoryOrderListQuery query, @Param("uid") Long uid);
    List<XpOrder> getHistoryStartPoints(@Param("uid") Long uid);
    List<XpOrder> getHistoryEndPoints(@Param("uid") Long uid);
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -358,7 +358,7 @@
            wrapper.ge(XpOrder::getCreateTime, LocalDateTime.of(query.getStartTime(), LocalTime.MIN));
        }
        if (Objects.nonNull(query.getEndTime())) {
            wrapper.ge(XpOrder::getCreateTime, LocalDateTime.of(query.getEndTime(), LocalTime.MAX));
            wrapper.le(XpOrder::getCreateTime, LocalDateTime.of(query.getEndTime(), LocalTime.MAX));
        }
        wrapper.orderByDesc(XpOrder::getCreateTime);
        return wrapper;
@@ -831,7 +831,8 @@
    @Override
    public List<XpHistoryStartPointsVo> getHistoryStartPoints(String uid, double lon, double lat) {
        //
        List<XpOrder> xpOrders = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.parseLong(uid)).orderByDesc(BaseModel::getCreateTime).last("LIMIT 10"));
        List<XpOrder> xpOrders = this.baseMapper.getHistoryStartPoints(Long.valueOf(uid));
//        selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.parseLong(uid)).orderByDesc(BaseModel::getCreateTime).last("LIMIT 10"));
        if (xpOrders.isEmpty()) {
            return Collections.emptyList();
        }
@@ -839,14 +840,28 @@
        List<Long> startPointsIds = xpOrders.stream().map(XpOrder::getStartPointId).collect(Collectors.toList());
        R<List<XpHistoryStartPointsVo>> r = xpPointClient.getHistoryStartPoints(new HistoryStartPointsDto(startPointsIds, lon, lat));
        return r.getData();
        List<XpHistoryStartPointsVo> data = r.getData();
        for (XpHistoryStartPointsVo datum : data) {
            xpOrders.stream().filter(e->e.getEndPointId().equals(datum.getId())).findFirst().ifPresent(
                    order->{
                        datum.setNum(order.getNum());
                    }
            );
        }
        data =  data.stream().sorted(Comparator.comparingInt(XpHistoryStartPointsVo::getNum).reversed()).collect(Collectors.toList());
        return data;
    }
    @Override
    public List<XpHistoryEndPointsVo> getHistoryEndPoints(String uid, double lon, double lat) {
        //
        List<XpOrder> xpOrders = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.parseLong(uid)).orderByDesc(BaseModel::getCreateTime).last("LIMIT 10"));
        List<XpOrder> xpOrders = this.baseMapper.getHistoryEndPoints(Long.valueOf(uid));
//        selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.parseLong(uid)).orderByDesc(BaseModel::getCreateTime).last("LIMIT 10"));
        if (xpOrders.isEmpty()) {
            return Collections.emptyList();
        }
@@ -854,7 +869,19 @@
        List<Long> endPointsIds = xpOrders.stream().map(XpOrder::getEndPointId).collect(Collectors.toList());
        R<List<XpHistoryEndPointsVo>> r = xpPointClient.getHistoryEndPoints(new HistoryEndPointsDto(endPointsIds, lon, lat));
        return r.getData();
        List<XpHistoryEndPointsVo> data = r.getData();
        for (XpHistoryEndPointsVo datum : data) {
            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());
        return data;
    }
@@ -943,6 +970,7 @@
        }
        if(order.getStatus()==1){
            order.setStatus(0);
            order.setAppUserId(null);
            baseMapper.updateById(order);
            return;
        }
@@ -1136,6 +1164,7 @@
                );
                break;
        }
        xpOrder.setAppUserId(null);
        this.updateById(xpOrder);
        return R.ok();
    }
@@ -1979,6 +2008,7 @@
                xpGeoQueryEntity.setOrderId(split[0]);
                // 存mongo数据
                xpPricingClient.updateXpGeoQueryEntity(split[0]);
                order.setAppUserId(null);
                this.updateById(order);
                // 修改车辆信息
xp-robotaxi-order-boot/src/main/resources/mapper/order/XpOrderMapper.xml
@@ -53,5 +53,25 @@
        </if>
        order by create_time desc
    </select>
    <select id="getHistoryStartPoints" resultType="com.xiaopeng.api.model.order.XpOrder"
            parameterType="java.lang.Long">
        SELECT
            start_point_id,
            COUNT(*) AS num
        FROM xp_order where app_user_id = #{uid}
        GROUP BY start_point_id
        ORDER BY num DESC,create_time desc
            LIMIT 10;
    </select>
    <select id="getHistoryEndPoints" resultType="com.xiaopeng.api.model.order.XpOrder"
            parameterType="java.lang.Long">
        SELECT
            end_point_id,
            COUNT(*) AS num
        FROM xp_order where app_user_id = #{uid}
        GROUP BY end_point_id
        ORDER BY num DESC,create_time desc
            LIMIT 10;
    </select>
</mapper>