From 2996980930ea678d56fde08e5515d3f1b6ab52bd Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期六, 14 二月 2026 09:26:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java | 83 ++++++++++++++++++++++++++++++++++++++++-
1 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java
index 93c8a6b..a3964c5 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPricingServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.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.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
@@ -12,7 +13,6 @@
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
-import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.XpAppUser;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.model.order.XpOrder;
@@ -26,23 +26,27 @@
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.utils.DateUtils;
import com.xiaopeng.common.core.utils.uuid.UUID;
+import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.operation.constant.I18nKeyConstant;
+import com.xiaopeng.operation.dto.PricingAddDTO;
+import com.xiaopeng.operation.dto.PricingSetPriceDTO;
+import com.xiaopeng.operation.dto.PricingSetRuleDTO;
import com.xiaopeng.operation.dto.XpOrderDto;
-import com.xiaopeng.api.model.operation.XpGeoQueryEntity;
import com.xiaopeng.operation.mapper.*;
+import com.xiaopeng.operation.query.PricingPageListQuery;
import com.xiaopeng.operation.service.IXpGeoQueryEntityService;
import com.xiaopeng.operation.service.XpPricingService;
import com.xiaopeng.operation.utils.XpPricingUtil;
import com.xiaopeng.operation.utils.holiday.HolidayUtil;
import com.xiaopeng.operation.utils.map.FastDistanceCalculator;
+import com.xiaopeng.operation.vo.PricingPageListVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.stereotype.Service;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
-import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.*;
@@ -614,5 +618,78 @@
return false;
}
+ @Override
+ public PageInfo<PricingPageListVO> pageList(PricingPageListQuery query) {
+ PageInfo<PricingPageListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
+ Page<PricingPageListVO> page = this.baseMapper.pageList(pageInfo, query);
+ pageInfo.setRecords(page.getRecords());
+ pageInfo.setTotal(page.getTotal());
+ return pageInfo;
+ }
+
+ @Override
+ public void add(PricingAddDTO dto) {
+ XpOpenCity openCity = xpOpenCityMapper.selectById(dto.getCityId());
+ if (openCity == null) {
+ throw new ServiceException("开通城市不存在");
+ }
+
+ Long count = this.lambdaQuery()
+ .eq(XpPricing::getVehicleModel, dto.getVehicleModel())
+ .eq(XpPricing::getChannel, dto.getChannel())
+ .eq(XpPricing::getCityId, dto.getCityId().intValue())
+ .count();
+ if (count != null && count > 0) {
+ throw new ServiceException("该车型/渠道/城市的定价已存在", I18nKeyConstant.PRICING_EXISTS);
+ }
+
+ XpPricing pricing = new XpPricing();
+ pricing.setVehicleModel(dto.getVehicleModel());
+ pricing.setChannel(dto.getChannel());
+ pricing.setCityId(dto.getCityId().intValue());
+ pricing.setRemark(dto.getRemark());
+ pricing.setPricingType(dto.getPricingType());
+ pricing.setBasicPricingJson("{}");
+ pricing.setStartingFareJson("[]");
+ pricing.setDynamicPricingJson("{}");
+ pricing.setIsDynamicPrice(0);
+ this.save(pricing);
+ }
+
+ @Override
+ public void setPrice(PricingSetPriceDTO dto) {
+ XpPricing pricing = this.getById(dto.getId());
+ if (pricing == null) {
+ throw new ServiceException("定价不存在", I18nKeyConstant.PRICING_NOT_EXIST);
+ }
+
+ try {
+ JSONObject.parseObject(dto.getBasicPricingJson());
+ JSONArray.parseArray(dto.getStartingFareJson());
+ JSONObject.parseObject(dto.getDynamicPricingJson());
+ } catch (Exception e) {
+ throw new ServiceException("价格配置JSON格式不正确", I18nKeyConstant.PRICING_JSON_INVALID);
+ }
+
+ XpPricing update = new XpPricing();
+ update.setId(dto.getId());
+ update.setBasicPricingJson(dto.getBasicPricingJson());
+ update.setStartingFareJson(dto.getStartingFareJson());
+ update.setDynamicPricingJson(dto.getDynamicPricingJson());
+ this.updateById(update);
+ }
+
+ @Override
+ public void setRule(PricingSetRuleDTO dto) {
+ XpPricing pricing = this.getById(dto.getId());
+ if (pricing == null) {
+ throw new ServiceException("定价不存在", I18nKeyConstant.PRICING_NOT_EXIST);
+ }
+
+ XpPricing update = new XpPricing();
+ update.setId(dto.getId());
+ update.setPriceRule(dto.getPriceRule());
+ this.updateById(update);
+ }
}
--
Gitblit v1.7.1