|
|
@@ -38,7 +38,6 @@ import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicLong;
|
|
|
-import java.util.function.Function;
|
|
|
|
|
|
import static com.ruoyi.system.domain.flash.FlashDeliveryStatus.*;
|
|
|
|
|
|
@@ -299,43 +298,6 @@ public class FlashDeliveryApplicationService {
|
|
|
return message != null && message.contains("uk_flash_order_no");
|
|
|
}
|
|
|
|
|
|
- /** 分页查询当前用户参与的订单卡片;role=sender 按寄件人、receiver 按收件人过滤。 */
|
|
|
- public IPage<FlashDeliveryUserOrderListView> userOrders(Long userId, int pageNum, int pageSize, String role) {
|
|
|
- String selectedRole = hasText(role) ? role.trim().toLowerCase(Locale.ROOT) : "sender";
|
|
|
- if (!"sender".equals(selectedRole) && !"receiver".equals(selectedRole)) {
|
|
|
- throw fail("flash.delivery.tab.invalid");
|
|
|
- }
|
|
|
- QueryWrapper<FlashDeliveryOrder> query = new QueryWrapper<>();
|
|
|
- if ("receiver".equals(selectedRole)) {
|
|
|
- query.and(participant -> participant.eq("receiver_user_id", userId)
|
|
|
- .or().apply("exists (select 1 from flash_delivery_order_stop s where s.order_id = flash_delivery_order.id "
|
|
|
- + "and s.stop_type = 'DELIVERY' and s.receiver_user_id = {0})", userId));
|
|
|
- } else {
|
|
|
- query.eq("user_id", userId);
|
|
|
- }
|
|
|
- query.orderByDesc("create_time");
|
|
|
- IPage<FlashDeliveryOrder> orders = orderMapper.selectPage(page(pageNum, pageSize), query);
|
|
|
- Map<Long, List<FlashDeliveryOrderStop>> stopRows = stopRowsFor(orders.getRecords());
|
|
|
- return mapPage(orders, order -> {
|
|
|
- FlashDeliveryUserOrderListView view = userOrderListView(order);
|
|
|
- List<FlashDeliveryOrderStop> rows = stopRows.get(order.getId());
|
|
|
- if ("receiver".equals(selectedRole) && order.getDeliveryStopCount() != null
|
|
|
- && !Objects.equals(userId, order.getUserId()) && rows != null) {
|
|
|
- rows.stream().filter(s -> "DELIVERY".equals(s.getStopType())
|
|
|
- && Objects.equals(userId, s.getReceiverUserId())).findFirst().ifPresent(own -> {
|
|
|
- view.setDeliveryAddress(own.getAddress());
|
|
|
- view.setDeliveryDetailAddress(own.getAddressDetail());
|
|
|
- });
|
|
|
- }
|
|
|
- // v2 多站点卡片逐站展示;寄件人全站文字地址,收件人仅本站,其余站只留类型/序号/状态。
|
|
|
- if (order.getDeliveryStopCount() != null && rows != null && !rows.isEmpty()) {
|
|
|
- view.setStops(FlashDeliveryUserCardStops.of(rows, userId, Objects.equals(userId, order.getUserId())));
|
|
|
- }
|
|
|
- view.setCanUserCancel(Objects.equals(userId, order.getUserId()) && canUserCancel(order));
|
|
|
- return view;
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
/** 查询本人订单详情,仅寄件人和匹配到的收件人可见。 */
|
|
|
public FlashDeliveryOrderDetailView userDetail(Long userId, Long orderId) {
|
|
|
return userDetail(userId, requireOrder(orderId));
|
|
|
@@ -1569,43 +1531,6 @@ public class FlashDeliveryApplicationService {
|
|
|
return view;
|
|
|
}
|
|
|
|
|
|
- /** 订单实体转用户端订单卡片。 */
|
|
|
- private FlashDeliveryUserOrderListView userOrderListView(FlashDeliveryOrder order) {
|
|
|
- FlashDeliveryUserOrderListView view = new FlashDeliveryUserOrderListView();
|
|
|
- view.setId(order.getId());
|
|
|
- view.setOrderNo(order.getOrderNo());
|
|
|
- view.setServiceType(order.getServiceType());
|
|
|
- view.setDeliveryType(order.getDeliveryType());
|
|
|
- view.setVehicleType(vehicleTypeOf(order));
|
|
|
- view.setStatus(order.getStatus());
|
|
|
- view.setPickupStopCount(order.getPickupStopCount());
|
|
|
- view.setPickedUpStopCount(order.getPickedUpStopCount());
|
|
|
- view.setDeliveryStopCount(expectedDeliveryStopCount(order));
|
|
|
- view.setDeliveredStopCount(deliveredStopCount(order));
|
|
|
- view.setCanUserCancel(canUserCancel(order));
|
|
|
- view.setOrderVersion(order.getVersion());
|
|
|
- view.setPackageType(order.getPackageType());
|
|
|
- view.setQuantity(order.getQuantity());
|
|
|
- view.setWeightRange(order.getWeightRange());
|
|
|
- view.setDeliveryMode(order.getDeliveryMode());
|
|
|
- view.setScheduledPickupStartAt(order.getScheduledPickupStartAt());
|
|
|
- view.setScheduledPickupEndAt(order.getScheduledPickupEndAt());
|
|
|
- view.setPickupAddress(order.getPickupAddress());
|
|
|
- view.setPickupDetailAddress(order.getPickupAddressDetail());
|
|
|
- view.setDeliveryAddress(order.getDeliveryAddress());
|
|
|
- view.setDeliveryDetailAddress(order.getDeliveryAddressDetail());
|
|
|
- view.setEstimatedDurationSeconds(order.getEstimatedDurationSeconds());
|
|
|
- view.setBaseDeliveryFee(order.getBaseDeliveryFee());
|
|
|
- view.setUrgentFee(order.getUrgentFee());
|
|
|
- view.setTipAmount(order.getTipAmount());
|
|
|
- view.setAmount(order.getAmount());
|
|
|
- view.setCurrency(order.getCurrency());
|
|
|
- view.setPaymentStatus(order.getPaymentStatus());
|
|
|
- view.setDeliveredAt(order.getDeliveredAt());
|
|
|
- view.setCreateTime(order.getCreateTime());
|
|
|
- return view;
|
|
|
- }
|
|
|
-
|
|
|
/** 订单实体转骑手端任务卡片,可附带骑手到取件点的直线距离。 */
|
|
|
/** 列表页一次 IN 批量取回 v2 多站点单的站点,避免逐单 N+1;单点单卡片不需要逐站展示。 */
|
|
|
private Map<Long, List<FlashDeliveryOrderStop>> stopRowsFor(List<FlashDeliveryOrder> records) {
|
|
|
@@ -1935,14 +1860,6 @@ public class FlashDeliveryApplicationService {
|
|
|
return new Page<>(Math.max(1, pageNum), Math.min(Math.max(1, pageSize), 100));
|
|
|
}
|
|
|
|
|
|
- /** 分页结果实体转换,保留分页元数据。 */
|
|
|
- private <T> IPage<T> mapPage(IPage<FlashDeliveryOrder> source,
|
|
|
- Function<FlashDeliveryOrder, T> mapper) {
|
|
|
- Page<T> result = new Page<>(source.getCurrent(), source.getSize(), source.getTotal());
|
|
|
- result.setRecords(source.getRecords().stream().map(mapper).toList());
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
/** 按页签构建骑手任务查询:newTask 限定可抢状态与时间窗,可选距离过滤和就近排序。 */
|
|
|
private QueryWrapper<FlashDeliveryOrder> riderOrdersQuery(Long riderId, Integer riderVehicleType, String tab,
|
|
|
BigDecimal longitude, BigDecimal latitude,
|