liujie
2026-02-14 c99ff84eb3e0075aed3537b9ab82438217c3ff17
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi
2个文件已添加
6个文件已修改
102 ■■■■■ 已修改文件
logs/ruoyi-file/error.log 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/GetUserCouponDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/UseUserCouponDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpAppUserCouponClientFallbackFactory.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpAppUserCouponClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
logs/ruoyi-file/error.log
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -10,6 +10,7 @@
import com.xiaopeng.account.model.vo.XpAppUserCouponVo;
import com.xiaopeng.account.service.IXpAppUserCouponService;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.feignClient.operation.XpOpenCityClient;
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.vo.account.UserCouponVo;
@@ -78,7 +79,7 @@
        return R.ok(userCouponVo);
    }
    @PostMapping("/inner/appUserCoupon/useUserCoupon")
    public R useUserCoupon(@RequestBody GetUserCouponDto dto) {
    public R useUserCoupon(@RequestBody UseUserCouponDto dto) {
        XpAppUserCoupon appUserCoupon = xpAppUserCouponService.getById(dto.getUserId());
        appUserCoupon.setStatus(2);
        xpAppUserCouponService.updateById(appUserCoupon);
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/GetUserCouponDto.java
@@ -13,10 +13,7 @@
public class GetUserCouponDto {
    @ApiModelProperty(value = "用户ID")
    private Long userId;
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @ApiModelProperty(value = "用户优惠券id")
    private Long userCouponId;
    @ApiModelProperty(value = "订单总金额")
    private Double totalAmount;
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/UseUserCouponDto.java
New file
@@ -0,0 +1,26 @@
package com.xiaopeng.api.dto.account;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@ApiModel(value = "使用用户优惠券参数")
@AllArgsConstructor
@NoArgsConstructor
public class UseUserCouponDto {
    @ApiModelProperty(value = "用户ID")
    private Long userId;
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @ApiModelProperty(value = "用户优惠券id")
    private Long userCouponId;
    @ApiModelProperty(value = "订单总金额")
    private Double totalAmount;
    @ApiModelProperty(value = "开通城市id")
    private Long openCityId;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpAppUserCouponClientFallbackFactory.java
@@ -1,6 +1,7 @@
package com.xiaopeng.api.factory.account;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
import com.xiaopeng.api.dto.statistics.UserStatisticsDTO;
import com.xiaopeng.api.feignClient.account.XpAppUserClient;
@@ -33,7 +34,7 @@
            }
            @Override
            public R useUserCoupon(GetUserCouponDto dto) {
            public R useUserCoupon(UseUserCouponDto dto) {
                log.error("优惠券使用失败,原因: {}", cause.getMessage());
                return R.fail("优惠券使用失败,"+cause.getMessage());
            }
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpAppUserCouponClient.java
@@ -1,6 +1,7 @@
package com.xiaopeng.api.feignClient.account;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.account.UseUserCouponDto;
import com.xiaopeng.api.factory.account.XpAppUserCouponClientFallbackFactory;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.common.core.domain.R;
@@ -23,6 +24,6 @@
    @PostMapping("/inner/appUserCoupon/getUserCoupon")
    R<UserCouponVo> getUserCoupon(@RequestBody GetUserCouponDto dto);
    @PostMapping("/inner/appUserCoupon/useUserCoupon")
    R useUserCoupon(@RequestBody GetUserCouponDto dto);
    R useUserCoupon(@RequestBody UseUserCouponDto dto);
}
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -383,10 +383,10 @@
        }
        return R.ok();
    }
    /**+
     * 获取行程费用明细
     */
    @PutMapping("/api/v1/mini-program/order/fare-breakdown/{orderId}")
    @ApiOperation(value = "获取行程费用明细", tags = {"小程序-获取行程费用明细"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -9,6 +9,7 @@
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.UseUserCouponDto;
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.order.GetOrderNumDto;
@@ -99,6 +100,7 @@
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -1000,6 +1002,47 @@
        System.err.println("--------------------------");
        System.err.println("应付总额: " + totalAmount + " 元");
        BigDecimal startMoney = BigDecimal.ZERO;
         // 默认费率1
        double priceRate = 1;
        if (pricing.getIsDynamicPrice() == 1) {
            // 先判断是否已经调价过了
            Object userDynamicPriceObj = redisService.getCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid);
            if (userDynamicPriceObj != null) {
                // 是否调价过了
                priceRate = Double.parseDouble(userDynamicPriceObj.toString());
            } else {
                // 没有调过
                //是否触发动态调价 redis获取
                Object dynamicPriceObj = redisService.getCacheObject("DYNAMIC_PRICE_" + order.getCityId());
                if (dynamicPriceObj != null) {
                    JSONObject jsonObject = JSONObject.parseObject(pricing.getDynamicPricingJson());
                    // 触发动态调价
                    // value=时间
                    String timeStr = dynamicPriceObj.toString();
                    // 判断当前距离这个时间范围的新增订单数(排除取消) / 上浮数量 算出应该增加的价格率
                    Integer num = this.getOrderNum(new GetOrderNumDto(timeStr, order.getCityId()));
                    // X单上升一次调价
                    Integer orderNum = getOrderNum(jsonObject, 4);
                    // 需要调价的次数
                    int count = num / orderNum;
                    if (count > 0) {
                        // 计算每次上升的费率
                        Integer upRate = getOrderNum(jsonObject, 5);
                        BigDecimal divide = new BigDecimal(upRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
                        for (int i = count; i > 0; i--) {
                            // 当前费率+(费率*上升百分比)
                            priceRate = new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue();
                        }
                        // 冷却时间
                        Integer time = getOrderNum(jsonObject, 6);
                        // 触发调价了
                        redisService.setCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid, priceRate, time.longValue(), TimeUnit.MINUTES);
                    }
                }
            }
        }
        // 封装费用明细数据
        for (Map.Entry<String, BigDecimal> stringBigDecimalEntry : bill.entrySet()) {
            // 封装起步价
@@ -1032,7 +1075,8 @@
                    BigDecimal distance = bill.get(key1);
                    BigDecimal money = bill.get(key2);
                    mileageDetail.setMileage(distance);
                    mileageDetail.setMoney(money);
                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                } else if (key.contains("夜间行驶")) {
                    mileageDetail.setType(2);
                    String key1 = "distance夜间行驶" + key.split("\\|")[1];
@@ -1040,7 +1084,9 @@
                    BigDecimal distance = bill.get(key1);
                    BigDecimal money = bill.get(key2);
                    mileageDetail.setMileage(distance);
                    mileageDetail.setMoney(money);
                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                } else if (key.contains("高峰期")) {
                    mileageDetail.setType(3);
                    String key1 = "distance高峰期" + key.split("\\|")[1];
@@ -1048,7 +1094,9 @@
                    BigDecimal distance = bill.get(key1);
                    BigDecimal money = bill.get(key2);
                    mileageDetail.setMileage(distance);
                    mileageDetail.setMoney(money);
                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                } else if (key.contains("节假")) {
                    mileageDetail.setType(4);
                    String key1 = "distance节假日" + key.split("\\|")[1];
@@ -1056,10 +1104,10 @@
                    BigDecimal distance = bill.get(key1);
                    BigDecimal money = bill.get(key2);
                    mileageDetail.setMileage(distance);
                    mileageDetail.setMoney(money);
                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                }
                mileage.add(mileageDetail);
            }
            // 封装时长费
            FareBreakdownDetailVo timeDetail = new FareBreakdownDetailVo();
@@ -1116,7 +1164,7 @@
        order.setOrderMoney(orderMoney);
        baseMapper.updateById(order);
        if (order.getCouponId() != null) {
            GetUserCouponDto useUserCouponDto = new GetUserCouponDto();
            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
            useUserCouponDto.setUserId(Long.valueOf(uid));
            useUserCouponDto.setTotalAmount(order.getOrderMoney().doubleValue());
            useUserCouponDto.setOpenCityId(order.getCityId());