|
@@ -208,13 +208,15 @@ public class FlashDeliveryApplicationService {
|
|
|
|
|
|
|
|
public FlashDeliveryRiderOrderPageView riderOrders(Long riderId, int pageNum, int pageSize,
|
|
public FlashDeliveryRiderOrderPageView riderOrders(Long riderId, int pageNum, int pageSize,
|
|
|
String tab, BigDecimal longitude, BigDecimal latitude) {
|
|
String tab, BigDecimal longitude, BigDecimal latitude) {
|
|
|
- requireRider(riderId);
|
|
|
|
|
|
|
+ InfoUser rider = requireRider(riderId);
|
|
|
if (!hasText(tab)) throw fail("flash.delivery.tab.invalid");
|
|
if (!hasText(tab)) throw fail("flash.delivery.tab.invalid");
|
|
|
String selectedTab = tab.trim();
|
|
String selectedTab = tab.trim();
|
|
|
// lambda 无法捕获被重新赋值的参数,统一改用仅 newTask 携带坐标的有效变量。
|
|
// lambda 无法捕获被重新赋值的参数,统一改用仅 newTask 携带坐标的有效变量。
|
|
|
BigDecimal effectiveLongitude = "newTask".equals(selectedTab) ? longitude : null;
|
|
BigDecimal effectiveLongitude = "newTask".equals(selectedTab) ? longitude : null;
|
|
|
BigDecimal effectiveLatitude = "newTask".equals(selectedTab) ? latitude : null;
|
|
BigDecimal effectiveLatitude = "newTask".equals(selectedTab) ? latitude : null;
|
|
|
if ("newTask".equals(selectedTab)) {
|
|
if ("newTask".equals(selectedTab)) {
|
|
|
|
|
+ // 新任务派单按骑手选择的配送类型过滤;本人已接订单页签不受限制。
|
|
|
|
|
+ if (!rider.supportsDeliveryType("FLASH")) throw fail("flash.delivery.rider.type.not.enabled");
|
|
|
validateRiderCoordinates(effectiveLongitude, effectiveLatitude);
|
|
validateRiderCoordinates(effectiveLongitude, effectiveLatitude);
|
|
|
}
|
|
}
|
|
|
QueryWrapper<FlashDeliveryOrder> query = riderOrdersQuery(riderId, selectedTab,
|
|
QueryWrapper<FlashDeliveryOrder> query = riderOrdersQuery(riderId, selectedTab,
|
|
@@ -237,10 +239,13 @@ public class FlashDeliveryApplicationService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public FlashDeliveryOrderDetailView riderDetail(Long riderId, Long orderId) {
|
|
public FlashDeliveryOrderDetailView riderDetail(Long riderId, Long orderId) {
|
|
|
- requireRider(riderId);
|
|
|
|
|
|
|
+ InfoUser rider = requireRider(riderId);
|
|
|
FlashDeliveryOrder order = requireOrder(orderId);
|
|
FlashDeliveryOrder order = requireOrder(orderId);
|
|
|
if (WAITING_ACCEPTANCE.equals(order.getStatus()) && order.getRiderId() == null) {
|
|
if (WAITING_ACCEPTANCE.equals(order.getStatus()) && order.getRiderId() == null) {
|
|
|
- if (!isAvailableAt(order, new Date())) throw fail("flash.delivery.order.not.found");
|
|
|
|
|
|
|
+ // 不兼容闪送的骑手按订单不存在处理,避免泄露待抢任务信息。
|
|
|
|
|
+ if (!isAvailableAt(order, new Date()) || !rider.supportsDeliveryType("FLASH")) {
|
|
|
|
|
+ throw fail("flash.delivery.order.not.found");
|
|
|
|
|
+ }
|
|
|
// 接单前显示取送文字地址,但隐藏联系人、电话、精确坐标、实际 PIN 和履约图片。
|
|
// 接单前显示取送文字地址,但隐藏联系人、电话、精确坐标、实际 PIN 和履约图片。
|
|
|
return participantDetail(order, false, true);
|
|
return participantDetail(order, false, true);
|
|
|
}
|
|
}
|
|
@@ -250,7 +255,9 @@ public class FlashDeliveryApplicationService {
|
|
|
|
|
|
|
|
@Transactional
|
|
@Transactional
|
|
|
public FlashDeliveryOrderDetailView accept(Long riderId, Long orderId) {
|
|
public FlashDeliveryOrderDetailView accept(Long riderId, Long orderId) {
|
|
|
- requireRider(riderId);
|
|
|
|
|
|
|
+ InfoUser rider = requireRider(riderId);
|
|
|
|
|
+ // 抢单属于获取新任务,要求骑手承接闪送配送。
|
|
|
|
|
+ if (!rider.supportsDeliveryType("FLASH")) throw fail("flash.delivery.rider.type.not.enabled");
|
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
|
// Mapper 使用“待接单且 rider_id 为空”的条件更新,受影响行数为 1 才表示抢单成功。
|
|
// Mapper 使用“待接单且 rider_id 为空”的条件更新,受影响行数为 1 才表示抢单成功。
|
|
|
if (orderMapper.accept(orderId, riderId, now) != 1) throw fail("flash.delivery.order.already.accepted");
|
|
if (orderMapper.accept(orderId, riderId, now) != 1) throw fail("flash.delivery.order.already.accepted");
|
|
@@ -768,9 +775,10 @@ public class FlashDeliveryApplicationService {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void requireRider(Long riderId) {
|
|
|
|
|
|
|
+ private InfoUser requireRider(Long riderId) {
|
|
|
InfoUser rider = riderId == null ? null : userMapper.selectInfoUserByUserId(riderId);
|
|
InfoUser rider = riderId == null ? null : userMapper.selectInfoUserByUserId(riderId);
|
|
|
if (rider == null || !"2".equals(rider.getUserType())) throw fail("flash.delivery.rider.required");
|
|
if (rider == null || !"2".equals(rider.getUserType())) throw fail("flash.delivery.rider.required");
|
|
|
|
|
+ return rider;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private FlashDeliveryOrder requireOrder(Long orderId) {
|
|
private FlashDeliveryOrder requireOrder(Long orderId) {
|