FlashDeliveryOrderMapper.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package com.ruoyi.system.mapper.flash;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.ruoyi.system.domain.flash.FlashDeliveryOrder;
  4. import org.apache.ibatis.annotations.Param;
  5. import java.util.Date;
  6. import java.util.List;
  7. /** 闪送订单持久化接口,关键状态操作均使用带前置条件的原子 SQL。 */
  8. public interface FlashDeliveryOrderMapper extends BaseMapper<FlashDeliveryOrder> {
  9. /** 按用户幂等键查询已经创建的订单。 */
  10. FlashDeliveryOrder selectByUserRequestId(@Param("userId") Long userId,
  11. @Param("clientRequestId") String clientRequestId);
  12. /**
  13. * 原子抢单,仅当订单仍为待接单且未绑定骑手时更新成功。
  14. *
  15. * @return 1 表示抢单成功,0 表示订单已被抢走或状态已变化
  16. */
  17. int accept(@Param("id") Long id, @Param("riderId") Long riderId, @Param("now") Date now);
  18. /** 待接单编辑:同时校验创建人、无骑手和版本,原子更新地址、收件人绑定及路线费用。 */
  19. int updateWaitingAddress(@Param("order") FlashDeliveryOrder order,
  20. @Param("expectedVersion") Integer expectedVersion);
  21. /** 待接单追加小费:版本保护避免并发覆盖与重复加款。 */
  22. int updateWaitingTip(@Param("order") FlashDeliveryOrder order,
  23. @Param("expectedVersion") Integer expectedVersion);
  24. /** 按骑手归属和预期状态推进取件或送达,防止越权及并发重复操作。 */
  25. int transitionByRider(@Param("id") Long id, @Param("riderId") Long riderId,
  26. @Param("expectedStatus") String expectedStatus,
  27. @Param("nextStatus") String nextStatus,
  28. @Param("timeColumn") String timeColumn, @Param("now") Date now);
  29. /** 按订单所有人和预期状态完成用户确认收货。 */
  30. int transitionByParticipant(@Param("id") Long id, @Param("userId") Long userId,
  31. @Param("expectedStatus") String expectedStatus,
  32. @Param("nextStatus") String nextStatus, @Param("now") Date now);
  33. /** 供平台和系统任务按预期状态执行条件更新。 */
  34. int transitionByStatus(@Param("id") Long id, @Param("expectedStatus") String expectedStatus,
  35. @Param("nextStatus") String nextStatus,
  36. @Param("timeColumn") String timeColumn, @Param("now") Date now);
  37. /** 记录取消操作人和原因,并仅从调用方已校验的当前状态转为已取消。 */
  38. int cancel(@Param("id") Long id, @Param("expectedStatus") String expectedStatus,
  39. @Param("operatorType") String operatorType, @Param("operatorId") Long operatorId,
  40. @Param("reason") String reason, @Param("now") Date now);
  41. /** 分批查询送达时间早于截止点且仍未完成的订单。 */
  42. List<FlashDeliveryOrder> selectAutoCompletable(@Param("deadline") Date deadline,
  43. @Param("limit") int limit);
  44. }