|
@@ -269,6 +269,17 @@ public class FlashDeliveryApplicationService {
|
|
|
order.setDistanceMeters(quote.getDistanceMeters());
|
|
order.setDistanceMeters(quote.getDistanceMeters());
|
|
|
order.setDistanceSource(quote.getDistanceSource());
|
|
order.setDistanceSource(quote.getDistanceSource());
|
|
|
order.setEstimatedDurationSeconds(quote.getEstimatedDurationSeconds());
|
|
order.setEstimatedDurationSeconds(quote.getEstimatedDurationSeconds());
|
|
|
|
|
+ // 运价快照与金额同事务刷新为本次计价依据(快照=金额的最后一次计算依据,而非最初依据)
|
|
|
|
|
+ order.setPricingId(quote.getPricingId());
|
|
|
|
|
+ order.setPricingVersion(quote.getPricingVersion());
|
|
|
|
|
+ order.setPricingStartTime(quote.getStartTime());
|
|
|
|
|
+ order.setPricingEndTime(quote.getEndTime());
|
|
|
|
|
+ order.setStartingDistance(quote.getStartingDistance());
|
|
|
|
|
+ order.setStartingFare(quote.getStartingFare());
|
|
|
|
|
+ order.setDistance(quote.getDistance());
|
|
|
|
|
+ order.setFreight(quote.getFreight());
|
|
|
|
|
+ order.setUrgentRate(quote.getUrgentRate());
|
|
|
|
|
+ order.setMinimumUrgentFee(quote.getMinimumUrgentFee());
|
|
|
order.setDistanceFee(quote.getDistanceFee());
|
|
order.setDistanceFee(quote.getDistanceFee());
|
|
|
order.setBaseDeliveryFee(quote.getBaseDeliveryFee());
|
|
order.setBaseDeliveryFee(quote.getBaseDeliveryFee());
|
|
|
order.setUrgentFee(quote.getUrgentFee());
|
|
order.setUrgentFee(quote.getUrgentFee());
|
|
@@ -342,18 +353,11 @@ public class FlashDeliveryApplicationService {
|
|
|
new GeoPoint(request.getPickup().getLatitude(), request.getPickup().getLongitude()),
|
|
new GeoPoint(request.getPickup().getLatitude(), request.getPickup().getLongitude()),
|
|
|
new GeoPoint(request.getDelivery().getLatitude(), request.getDelivery().getLongitude()));
|
|
new GeoPoint(request.getDelivery().getLatitude(), request.getDelivery().getLongitude()));
|
|
|
if (route.distanceMeters() > MAX_DISTANCE_METERS) throw fail("flash.delivery.distance.too.far");
|
|
if (route.distanceMeters() > MAX_DISTANCE_METERS) throw fail("flash.delivery.distance.too.far");
|
|
|
- // 沿用订单快照,避免地址编辑顺带切换运价或重验已经到时的预约单。
|
|
|
|
|
- FlashDeliveryPricing pricing = new FlashDeliveryPricing();
|
|
|
|
|
- pricing.setId(order.getPricingId());
|
|
|
|
|
- pricing.setConfigVersion(order.getPricingVersion());
|
|
|
|
|
- pricing.setStartTime(order.getPricingStartTime());
|
|
|
|
|
- pricing.setEndTime(order.getPricingEndTime());
|
|
|
|
|
- pricing.setStartingDistance(order.getStartingDistance());
|
|
|
|
|
- pricing.setStartingFare(order.getStartingFare());
|
|
|
|
|
- pricing.setDistance(order.getDistance());
|
|
|
|
|
- pricing.setFreight(order.getFreight());
|
|
|
|
|
- pricing.setUrgentRate(order.getUrgentRate());
|
|
|
|
|
- pricing.setMinimumUrgentFee(order.getMinimumUrgentFee());
|
|
|
|
|
|
|
+ // 待接单尚未成交,改址按"订单定价时点"的最新运价重算(预约单取预约取件时刻、
|
|
|
|
|
+ // 立即单取当前),管理员调价对未接单的改址立即生效;时段语义保住,预约单不会用到错误时段的价格。
|
|
|
|
|
+ Date pricingDate = "SCHEDULED".equals(order.getDeliveryMode())
|
|
|
|
|
+ ? order.getScheduledPickupStartAt() : new Date();
|
|
|
|
|
+ FlashDeliveryPricing pricing = findPricingAt(pricingTargetTime(pricingDate));
|
|
|
FlashDeliveryPriceBreakdown breakdown;
|
|
FlashDeliveryPriceBreakdown breakdown;
|
|
|
try {
|
|
try {
|
|
|
breakdown = pricingCalculator.calculateBreakdown(pricing, route.distanceMeters(),
|
|
breakdown = pricingCalculator.calculateBreakdown(pricing, route.distanceMeters(),
|
|
@@ -569,7 +573,7 @@ public class FlashDeliveryApplicationService {
|
|
|
String serviceType, String orderNo,
|
|
String serviceType, String orderNo,
|
|
|
Long userId, Long riderId) {
|
|
Long userId, Long riderId) {
|
|
|
validateOptionalServiceType(serviceType);
|
|
validateOptionalServiceType(serviceType);
|
|
|
- QueryWrapper<FlashDeliveryOrder> query = new QueryWrapper<FlashDeliveryOrder>().orderByDesc("create_time");
|
|
|
|
|
|
|
+ QueryWrapper<FlashDeliveryOrder> query = new QueryWrapper<FlashDeliveryOrder>().orderByDesc("id");
|
|
|
optionalEq(query, "status", status);
|
|
optionalEq(query, "status", status);
|
|
|
optionalEq(query, "service_type", serviceType);
|
|
optionalEq(query, "service_type", serviceType);
|
|
|
if (hasText(orderNo)) query.like("order_no", orderNo.trim());
|
|
if (hasText(orderNo)) query.like("order_no", orderNo.trim());
|