update flash_delivery_order
set rider_id=#{riderId}, status='ACCEPTED', accepted_at=#{now}, update_time=#{now}, version = version + 1
where id=#{id} and status = 'WAITING_ACCEPTANCE' and rider_id is null and is_display = true
and (delivery_mode = 'NOW' or (scheduled_pickup_start_at <= #{now}
and scheduled_pickup_end_at > #{now}))
update flash_delivery_order
set pickup_stop_count = #{order.pickupStopCount}, picked_up_stop_count = 0, current_target_stop_id = null,
delivery_stop_count = #{order.deliveryStopCount}, delivered_stop_count = 0,
pickup_name = #{order.pickupName}, pickup_phone = #{order.pickupPhone},
pickup_address = #{order.pickupAddress}, pickup_address_detail = #{order.pickupAddressDetail},
pickup_city = #{order.pickupCity}, pickup_area = #{order.pickupArea},
pickup_handoff_method = #{order.pickupHandoffMethod},
pickup_longitude = #{order.pickupLongitude}, pickup_latitude = #{order.pickupLatitude},
delivery_name = #{order.deliveryName}, delivery_phone = #{order.deliveryPhone},
delivery_address = #{order.deliveryAddress}, delivery_address_detail = #{order.deliveryAddressDetail},
delivery_city = #{order.deliveryCity}, delivery_area = #{order.deliveryArea},
delivery_handoff_method = #{order.deliveryHandoffMethod},
delivery_longitude = #{order.deliveryLongitude}, delivery_latitude = #{order.deliveryLatitude},
receiver_user_id = #{order.receiverUserId},
distance_meters = #{order.distanceMeters}, distance_source = #{order.distanceSource},
estimated_duration_seconds = #{order.estimatedDurationSeconds},
pricing_id = #{order.pricingId}, pricing_version = #{order.pricingVersion},
pricing_start_time = #{order.pricingStartTime}, pricing_end_time = #{order.pricingEndTime},
starting_distance = #{order.startingDistance}, starting_fare = #{order.startingFare},
distance = #{order.distance}, freight = #{order.freight},
urgent_rate = #{order.urgentRate}, minimum_urgent_fee = #{order.minimumUrgentFee},
distance_fee = #{order.distanceFee}, base_delivery_fee = #{order.baseDeliveryFee},
urgent_fee = #{order.urgentFee}, amount = #{order.amount},
update_time = #{order.updateTime}, version = version + 1
where id = #{order.id} and user_id = #{order.userId}
and status = 'WAITING_ACCEPTANCE' and rider_id is null and version = #{expectedVersion}
update flash_delivery_order
set tip_amount = #{order.tipAmount}, amount = #{order.amount},
update_time = #{order.updateTime}, version = version + 1
where id = #{order.id} and user_id = #{order.userId}
and status = 'WAITING_ACCEPTANCE' and rider_id is null and version = #{expectedVersion}
update flash_delivery_order
set status=#{nextStatus},
picked_up_at=#{now},delivered_at=#{now},
update_time=#{now}, version = version + 1
where id=#{id} and rider_id=#{riderId} and status=#{expectedStatus}
and delivery_stop_count is null
update flash_delivery_order
set status=#{nextStatus}, completed_at=#{now}, update_time=#{now}, version = version + 1
where id=#{id} and (user_id=#{userId} or receiver_user_id = #{userId}
or 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 = #{userId})) and status=#{expectedStatus}
and not exists (select 1 from flash_delivery_order_stop s where s.order_id=flash_delivery_order.id
and s.stop_type='DELIVERY' and s.status <> 'DELIVERED')
update flash_delivery_order
set rider_stars=#{riderStars}, update_time=#{now}
where id=#{id} and user_id=#{userId} and status='COMPLETED'
and rider_id is not null and rider_stars is null
update flash_delivery_order
set status=#{nextStatus}, completed_at=#{now}, update_time=#{now}, version = version + 1
where id=#{id} and status=#{expectedStatus}
and not exists (select 1 from flash_delivery_order_stop s where s.order_id=flash_delivery_order.id
and s.stop_type='DELIVERY' and s.status <> 'DELIVERED')
update flash_delivery_order
set status='CANCELLED', cancelled_at=#{now}, cancel_reason=#{reason},
cancel_operator_type=#{operatorType}, cancel_operator_id=#{operatorId},
update_time=#{now}, version = version + 1
where id=#{id} and status=#{expectedStatus}
and status in ('WAITING_ACCEPTANCE','ACCEPTED') and picked_up_at is null
and coalesce(picked_up_stop_count,0)=0
and not exists (select 1 from flash_delivery_order_stop s where s.order_id=#{id}
and s.stop_type='PICKUP' and (s.status='PICKED_UP' or s.picked_up_at is not null))
update flash_delivery_order
set status = #{order.status}, picked_up_stop_count = #{order.pickedUpStopCount},
current_target_stop_id = #{order.currentTargetStopId}, picked_up_at = #{order.pickedUpAt},
update_time = #{order.updateTime}, version = version + 1
where id = #{order.id} and rider_id = #{order.riderId}
and status = 'ACCEPTED' and version = #{order.version}
update flash_delivery_order
set status = #{order.status}, delivered_stop_count = #{order.deliveredStopCount},
current_target_stop_id = #{order.currentTargetStopId},
delivered_at = #{order.deliveredAt}, update_time = #{order.updateTime}, version = version + 1
where id = #{order.id} and rider_id = #{order.riderId}
and status in ('ACCEPTED', 'PICKED_UP') and version = #{order.version}
update flash_delivery_order
set status='CANCELLED', cancelled_at=#{now}, cancel_reason='SCHEDULE_EXPIRED',
cancel_operator_type='SYSTEM', cancel_operator_id=null,
update_time=#{now}, version = version + 1
where id=#{id} and status='WAITING_ACCEPTANCE' and rider_id is null and delivery_mode='SCHEDULED'
and scheduled_pickup_end_at <= #{now}
update flash_delivery_order
set is_display = true, update_time = #{now}
where id=#{id} and status='WAITING_ACCEPTANCE' and rider_id is null and delivery_mode='SCHEDULED'
and is_display = false and scheduled_pickup_start_at <= #{now}
and scheduled_pickup_end_at > #{now}