xuhy
2026-04-17 7b484f9e43f0f0299a729415236b1ee17e71f8c9
[feat] 根据天气费率浮动
11个文件已修改
109 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/WeatherDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/map/XpMapClientFallbackFactory.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/map/XpMapClient.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/XpPricingUtil.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/WhitelistAddDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/WhitelistEditDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistAddDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistEditDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpTradingStrategyDetailVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/WeatherDTO.java
@@ -17,7 +17,8 @@
    List<Lives> lives;
    static class Lives {
    @Data
    static public class Lives {
        String province;
        String city;
        String adcode;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java
@@ -22,9 +22,8 @@
    @ApiModelProperty(value = "纬度")
    private double longitude;
    @ApiModelProperty(value = "纬度")
    @ApiModelProperty(value = "距离,这个是mongoDB查询时填充")
    private double distance;
    @ApiModelProperty(value = "状态;在线 , 上班中 , 空闲")
    private Long status;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/map/XpMapClientFallbackFactory.java
@@ -1,5 +1,6 @@
package com.xiaopeng.api.factory.map;
import com.xiaopeng.api.dto.WeatherDTO;
import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.feignClient.map.XpMapClient;
@@ -41,6 +42,12 @@
                log.error("判断是否同一经营区域失败:{}", cause.getMessage());
                return R.fail("判断是否同一经营区域失败");
            }
            @Override
            public R<WeatherDTO> wether(String cityCode) {
                log.error("获取天气失败:{}", cause.getMessage());
                return R.fail("获取天气失败");
            }
        };
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/map/XpMapClient.java
@@ -1,5 +1,6 @@
package com.xiaopeng.api.feignClient.map;
import com.xiaopeng.api.dto.WeatherDTO;
import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.factory.map.XpMapClientFallbackFactory;
@@ -53,5 +54,9 @@
    R<Boolean> diagnosisArea(@RequestBody RouteAndFareDto dto);
    /**
     * 获取指定城市的天气
     */
    @GetMapping("/logan/inner/weatherInfo")
    R<WeatherDTO> wether(@RequestParam String cityCode);
}
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/utils/XpPricingUtil.java
@@ -4,7 +4,9 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.xiaopeng.api.dto.WeatherDTO;
import com.xiaopeng.api.dto.order.GetOrderNumDto;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.vo.order.XpPricingCardVo;
import com.xiaopeng.common.core.domain.R;
@@ -14,10 +16,10 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.Date;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
@@ -66,6 +68,7 @@
//    }
//
    @Resource XpMapClient xpMapClient;
    /**
     * 计算一口价
     */
@@ -103,12 +106,26 @@
                                // 当前费率+(费率*上升百分比)
                                priceRate =  new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue();
                            }
                            List<WeatherDTO.Lives> lives = xpMapClient.wether(openCityId.toString()).getData().getLives();
                            if(lives!=null && !lives.isEmpty()){
                                String w = lives.get(0).getWeather();
                                Set<String> weather = jsonObject.getJSONObject("weather").keySet();
                                for (String k : weather) {
                                    if(w.contains(k)){
                                        double floatRate = jsonObject.getDouble(k);
                                        priceRate = new BigDecimal(priceRate).add(new BigDecimal(floatRate)).doubleValue();
                                        break;
                                    }
                                }
                            }
                            // 冷却时间
                            Integer time = getOrderNum(jsonObject, 6);
                            // 触发调价了
                            redisService.setCacheObject("USER_DYNAMIC_PRICE_" + openCityId + "_" + uid, priceRate,time.longValue(), TimeUnit.MINUTES);
                        }
                    }
                }
@@ -197,6 +214,9 @@
                            // 冷却时间
                            Integer time = getOrderNum(jsonObject, 6);
                            // 触发调价了
                            redisService.setCacheObject("USER_DYNAMIC_PRICE_" + openCityId + "_" + uid, priceRate,time.longValue(), TimeUnit.MINUTES);
                        }
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1491,9 +1491,11 @@
//        List<XpOperationsUserPositionDTO> users = mongoTemplate.find(new Query(Criteria.where("_id").in(ids)), XpOperationsUserPositionDTO.class);
        List<XpOperationsUserPositionDTO> XpOperationsUserPositionDTOs = repository.findWithDistance(new Point(vehiclePosition.getPoint().getX(), vehiclePosition.getPoint().getY()), 1000, ids);
        boolean skipBusy = false;//TODO 获取系统配置,是否开启跳过忙碌
        List<XpOperationsUserPositionDTO> candidates = XpOperationsUserPositionDTOs.stream()
                .filter(positionDTO -> skipBusy && positionDTO.getStatus() == 1)
//                .filter(positionDTO -> skipBusy && positionDTO.getStatus() == 1)
                .sorted(Comparator.comparing(XpOperationsUserPositionDTO::getDistance))
                .collect(Collectors.toList());
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/WhitelistAddDto.java
@@ -1,11 +1,14 @@
package com.xiaopeng.map.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
@Data
@ApiModel(value = "白名单新增DTO")
@@ -18,4 +21,23 @@
    @ApiModelProperty(value = "优先派单 1=是 0=否", required = true)
    @NotNull(message = "优先派单不能为空")
    private Boolean isPriorityDispatch;
    @ApiModelProperty(value = "状态 0=冻结 1=正常", required = true)
    @NotNull(message = "状态不能为空")
    private Boolean status;
    @ApiModelProperty(value = "有限期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expireTime;
    @ApiModelProperty(value = "最大下单数量")
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
    public Boolean getStatus() {
        if (LocalDate.now().isAfter(expireTime)) {
            return false;
        }
        return status;
    }
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/dto/WhitelistEditDto.java
@@ -1,11 +1,14 @@
package com.xiaopeng.map.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
@Data
@ApiModel(value = "白名单编辑DTO")
@@ -29,4 +32,20 @@
    private Boolean status;
    @ApiModelProperty(value = "有限期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expireTime;
    @ApiModelProperty(value = "最大下单数量")
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
    public Boolean getStatus() {
        if (LocalDate.now().isAfter(expireTime)) {
            return false;
        }
        return status;
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistAddDto.java
@@ -30,4 +30,14 @@
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
    @ApiModelProperty(value = "状态 0=冻结 1=正常", required = true)
    @NotNull(message = "状态不能为空")
    private Boolean status;
    public Boolean getStatus() {
        if (LocalDate.now().isAfter(expireTime)) {
            return false;
        }
        return status;
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/WhitelistEditDto.java
@@ -31,6 +31,7 @@
    @NotNull(message = "状态不能为空")
    private Boolean status;
    @ApiModelProperty(value = "有限期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate expireTime;
@@ -38,4 +39,11 @@
    @ApiModelProperty(value = "最大下单数量")
    @Min(value = 0, message = "不能为负")
    private Integer maxOrderNum;
    public Boolean getStatus() {
        if (LocalDate.now().isAfter(expireTime)) {
            return false;
        }
        return status;
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/XpTradingStrategyDetailVO.java
@@ -137,7 +137,7 @@
    private String cityCode;
    @ApiModelProperty(value = "路线时效,过了需要重新获取,单位:秒")
    private Integer MaxStandingTiming;
    private Integer maxStandingTiming;
    @ApiModelProperty(value = "触发步行导航的最小距离")
    private Integer walkingGuideDistance;